原生、纯净、可扩展 —— 重新定义你的 B 站体验
This report summarizes scanner evidence for jay3-yy/BiliPai, a Kotlin project with 4,819 GitHub stars. SynthScan examined 711,673 lines of code across 3605 source files, recording 1991 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 26.5 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 66 finding(s).
Are imports declared and package/API names verified? 1888 finding(s).
Are wrappers, guards, and repeated structures necessary? 65 finding(s).
Which changes need focused human review? 1991 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1991 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 28 | com.android.purebilibili.feature.home.components.CategoryTabRow( | CODE |
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 47 | com.android.purebilibili.feature.home.components.CategoryTabRow( | CODE |
| CRITICAL | …om/Android/purebilibili/feature/home/HomeScreenTest.kt | 65 | com.android.purebilibili.feature.home.components.FrostedBottomBar( | CODE |
| CRITICAL | …/core/ui/transition/VideoSharedTransitionPolicyTest.kt | 1076 | playerSource.contains("com.android.purebilibili.core.ui.motion.AppMotionTokens.spatialSpec()"), | CODE |
| CRITICAL | …ore/ui/skeleton/ContentLoadingSkeletonStructureTest.kt | 54 | assertFalse(space.contains("SpaceUiState.Loading -> {\n com.android.purebilibili.core.ui. | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 55 | val expected = if (dark) top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 56 | else top.yukonga.miuix.kmp.theme.lightColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 82 | val expected = if (dark) top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 83 | else top.yukonga.miuix.kmp.theme.lightColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 99 | val expected = if (dark) top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 100 | else top.yukonga.miuix.kmp.theme.lightColorScheme() | CODE |
| CRITICAL | …/purebilibili/core/theme/MiuixThemeBridgePolicyTest.kt | 134 | val upstream = top.yukonga.miuix.kmp.theme.darkColorScheme() | CODE |
| CRITICAL | …bilibili/navigation/MessageLinkNavigationPolicyTest.kt | 119 | val link = com.android.purebilibili.feature.message.feed.buildMessageFeedCommentNavigationLink( | CODE |
| CRITICAL | …bilibili/navigation/MessageLinkNavigationPolicyTest.kt | 208 | val link = com.android.purebilibili.feature.message.feed.buildMessageFeedCommentNavigationLink( | CODE |
| CRITICAL | …bilibili/navigation/MessageLinkNavigationPolicyTest.kt | 227 | val link = com.android.purebilibili.feature.message.feed.buildMessageFeedCommentNavigationLink( | CODE |
| CRITICAL | …bili/feature/settings/AppSegmentedControlPolicyTest.kt | 18 | val normal = com.android.purebilibili.core.ui.components.resolveAppSegmentedLabelFontSize(base, 5, 4) | CODE |
| CRITICAL | …bili/feature/settings/AppSegmentedControlPolicyTest.kt | 19 | val enlarged = com.android.purebilibili.core.ui.components.resolveAppSegmentedLabelFontSize(base * 1.3f, 5, 4) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 92 | assertEquals(2, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(5, 440f)) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 93 | assertEquals(1, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(3, 170f)) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 94 | assertEquals(1, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(1, 640f)) | CODE |
| CRITICAL⚡ | …ebilibili/feature/home/HomeFeedGridPolicyTabletTest.kt | 95 | assertEquals(1, com.android.purebilibili.core.ui.adaptive.resolveHingeSafeFeedColumns(2, 440f, minCardWidthDp = | CODE |
| CRITICAL | …ature/home/components/FloatingBottomBarGeometryTest.kt | 457 | val geometry = com.android.purebilibili.core.ui.resolveMatchedLiquidIndicatorGeometry( | CODE |
| CRITICAL | …ature/home/components/FloatingBottomBarGeometryTest.kt | 474 | val geometry = com.android.purebilibili.core.ui.resolveMatchedLiquidIndicatorGeometry( | CODE |
| CRITICAL | …/home/components/cards/VideoCardLongPressPolicyTest.kt | 32 | assertFalse(com.android.purebilibili.core.store.HomeSettings().videoCardLongPressActionEnabled) | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1010 | info = com.android.purebilibili.data.model.response.ViewInfo( | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1019 | com.android.purebilibili.feature.video.subtitle.SubtitleTrackMeta( | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1026 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL⚡ | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1033 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1055 | info = com.android.purebilibili.data.model.response.ViewInfo( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1060 | videoshotData = com.android.purebilibili.data.model.response.VideoshotData( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1074 | info = com.android.purebilibili.data.model.response.ViewInfo( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1107 | info = com.android.purebilibili.data.model.response.ViewInfo( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1122 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1129 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1152 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1159 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1182 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …/feature/video/viewmodel/VideoLoadRequestPolicyTest.kt | 1189 | com.android.purebilibili.feature.video.subtitle.SubtitleCue( | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 58 | page = com.android.purebilibili.data.model.response.ReplyPage(count = 56) | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 116 | page = com.android.purebilibili.data.model.response.ReplyPage( | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 134 | restPage = com.android.purebilibili.data.model.response.ReplyPage( | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 148 | restPage = com.android.purebilibili.data.model.response.ReplyPage( | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 186 | page = com.android.purebilibili.data.model.response.ReplyPage(count = 230), | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 196 | page = com.android.purebilibili.data.model.response.ReplyPage(count = 20), | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 250 | restPage = com.android.purebilibili.data.model.response.ReplyPage( | CODE |
| CRITICAL | …feature/video/viewmodel/CommentPaginationPolicyTest.kt | 284 | val remote = ReplyData(root = ReplyItem(rpid = 11L, content = com.android.purebilibili.data.model.response.Reply | CODE |
| CRITICAL | …deo/viewmodel/AudioModeCollectionPlaylistPolicyTest.kt | 73 | com.android.purebilibili.data.model.response.Page(cid = 11L, part = "第一集"), | CODE |
| CRITICAL | …deo/viewmodel/AudioModeCollectionPlaylistPolicyTest.kt | 74 | com.android.purebilibili.data.model.response.Page(cid = 22L, part = "第二集") | CODE |
| CRITICAL | …feature/video/ui/section/VideoPlayerCoverPolicyTest.kt | 542 | com.android.purebilibili.core.ui.transition.shouldUseDetailReturnCoverCrossfade( | CODE |
| CRITICAL | …feature/video/ui/section/VideoPlayerCoverPolicyTest.kt | 548 | com.android.purebilibili.core.ui.transition.shouldFadePlayerSurfaceOnDetailReturn( | CODE |
| CRITICAL | …eature/video/ui/section/BgmDiscoverySheetPolicyTest.kt | 15 | val tag = com.android.purebilibili.data.model.response.VideoTag(tag_type = "bgm", music_id = "MA123", tag_name = | CODE |
| CRITICAL⚡ | …deo/ui/components/RelatedVideoItemPiliPlusStyleTest.kt | 19 | com.android.purebilibili.core.util.FormatUtils.formatPublishTime( | CODE |
| CRITICAL⚡ | …deo/ui/components/RelatedVideoItemPiliPlusStyleTest.kt | 27 | com.android.purebilibili.core.util.FormatUtils.formatPublishTime( | CODE |
| CRITICAL⚡ | …deo/ui/components/RelatedVideoItemPiliPlusStyleTest.kt | 35 | com.android.purebilibili.core.util.FormatUtils.formatPublishTime( | CODE |
| CRITICAL | …ature/video/screen/VideoDetailReturnCoverPolicyTest.kt | 840 | com.android.purebilibili.core.ui.transition.shouldForceCoverOnlyForReturnOwnership( | CODE |
| CRITICAL | …ature/video/screen/VideoDetailReturnCoverPolicyTest.kt | 848 | com.android.purebilibili.core.ui.transition.shouldForceCoverOnlyForReturnOwnership( | CODE |
| CRITICAL | …ature/video/screen/VideoDetailReturnCoverPolicyTest.kt | 1662 | val snapshot = com.android.purebilibili.core.ui.transition.VideoCardSourceChromeSnapshot( | CODE |
| CRITICAL | …ature/video/screen/VideoDetailReturnCoverPolicyTest.kt | 1686 | val click = com.android.purebilibili.core.ui.transition.VideoCardSourceChromeSnapshot( | CODE |
| CRITICAL | …ature/video/screen/VideoDetailReturnCoverPolicyTest.kt | 1723 | sourceChromeSnapshot = com.android.purebilibili.core.ui.transition.VideoCardSourceChromeSnapshot( | CODE |
| CRITICAL | …ature/video/screen/VideoDetailReturnCoverPolicyTest.kt | 1735 | com.android.purebilibili.core.ui.transition.resolveVideoSharedCoverCacheKey("BV1"), | CODE |
| 1820 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …droid/purebilibili/core/ui/perf/FrameBudgetLintTest.kt | 200 | // ── 冻结于接入棘轮时的实测值,只能调小 ────────────────────────── | COMMENT |
| MEDIUM | …ilibili/feature/plugin/dlna/DlnaCastRoutePolicyTest.kt | 12 | // ── toDlnaCastRoute ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ilibili/feature/plugin/dlna/DlnaCastRoutePolicyTest.kt | 35 | // ── resolveDlnaRouteSelection ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ilibili/feature/plugin/dlna/DlnaCastRoutePolicyTest.kt | 63 | // ── buildDlnaRouteSnapshot ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/com/android/purebilibili/core/util/WindowSizeUtils.kt | 482 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/com/android/purebilibili/core/util/WindowSizeUtils.kt | 484 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 15 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 17 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 84 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 86 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 127 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 129 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 140 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 142 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 153 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 155 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 166 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 168 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 187 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 189 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 212 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 214 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 237 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 239 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 255 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …/java/com/android/purebilibili/core/util/EasterEggs.kt | 257 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 77 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 79 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 95 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …d/purebilibili/feature/settings/ui/SettingsSections.kt | 97 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …ili/core/ui/components/AdaptivePreferenceComponents.kt | 97 | // ═══════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …ili/core/ui/components/AdaptivePreferenceComponents.kt | 99 | // ═══════════════════════════════════════════════════ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/lottie.min.js | 1 | "undefined"!=typeof navigator&&function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"fu | CODE |
| LOW | plugins/tools/bilibili_skin_to_bpskin.py | 115 | def build_manifest_and_asset_sources( | CODE |
| LOW | plugins/tools/bilibili_skin_to_bpskin.py | 225 | def first_existing_package_asset(package_names: set[str], candidates: list[str]) -> str | None: | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 24 | def test_refresh_and_percentiles(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 34 | def test_workload_budget_not_assumed_refresh_period(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 38 | def test_missing_data_is_not_a_pass(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 43 | def test_label_never_invents_phase_attribution(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 49 | def test_counter_deltas_and_frame_phase_intervals(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 63 | def test_unterminated_phase_and_counter_reset_not_invented(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 70 | def test_old_header_can_use_explicit_refresh(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 76 | def test_invalid_rows_are_excluded(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 93 | def test_checkpoint_retains_transition_and_uses_final_window_counters(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 103 | def test_overwritten_phase_cannot_pass_on_idle_frames(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 111 | def test_partial_phase_is_reported_as_incomplete(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 117 | def test_slow_first_frame_is_not_mistaken_for_overwritten_buffer(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 124 | def test_disjoint_checkpoints_do_not_claim_coverage_across_a_gap(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 130 | def test_modern_and_legacy_platform_counters_are_kept_separate(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 137 | def test_duplicate_window_uses_latest_completion(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 142 | def test_failures_still_write_json_and_markdown(self): | CODE |
| LOW | scripts/test_video_card_transition_tools.py | 156 | def test_sampler_rejects_debug_and_smooth_without_adb(self): | CODE |
| LOW | scripts/test_video_card_transition_tools.py | 165 | def test_sampler_start_stop_end_to_end_with_mock_adb(self): | CODE |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 228 | def test_current_kotlin_tokens_all_presets(self): | STRING |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 234 | def test_critical_spring_release_has_exact_position_and_velocity(self): | STRING |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 243 | def test_fixed_refresh_samples_use_actual_frame_interval(self): | STRING |
| LOW⚡ | scripts/test_video_card_transition_tools.py | 249 | def test_probe_rejects_effects_overshoot(self): | STRING |
| LOW | …om/bytedance/danmaku/render/engine/data/DataManager.kt | 28 | class DataManager(controller: DanmakuController) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …rebilibili/feature/home/HomePullRefreshUiPolicyTest.kt | 50 | // Overlay chrome height via indicatorTopInset (not scaffold default 0). | COMMENT |
| MEDIUM | …rebilibili/feature/settings/ui/SettingsPageScaffold.kt | 170 | // Keep this backdrop in the scaffold chrome. The scroll content is its source, | COMMENT |
| MEDIUM | …bili/feature/home/subscription/SubscriptionFeedPage.kt | 1187 | // The scaffold records its content for both progressive blur and Haze. | COMMENT |
| MEDIUM | …oid/purebilibili/feature/message/MessageAppScaffold.kt | 58 | // This subtree is inside the scaffold's source; top chrome is its sibling. | COMMENT |
| MEDIUM | …com/android/purebilibili/feature/message/ChatScreen.kt | 286 | // Capture wallpaper and messages together, excluding the scaffold's top bar. | COMMENT |
| MEDIUM | …com/android/purebilibili/feature/message/ChatScreen.kt | 588 | // scaffold body so the external chrome source includes message content as well. | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 1009 | // zero here leaves only Search's opaque scaffold background for the remainder of the | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 1057 | // Keep the top chrome on the same semantic plane as the Miuix list scaffold. | COMMENT |
| MEDIUM | …om/android/purebilibili/feature/search/SearchScreen.kt | 2411 | // Landing keeps an overlay search bar; results pin it in the scaffold chrome | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …bilibili/core/ui/lint/StyleLintAllowlistRatchetTest.kt | 141 | private companion object { | COMMENT |
| LOW | …droid/purebilibili/core/ui/perf/FrameBudgetLintTest.kt | 201 | const val MAX_COMPOSED = 23 | COMMENT |
| LOW | …/purebilibili/core/cooldown/PlaybackCooldownManager.kt | 101 | if (consecutiveFailures > 0) { | COMMENT |
| LOW | …oid/purebilibili/feature/settings/SettingsViewModel.kt | 1061 | // [新增] 首页展示模式 | COMMENT |
| LOW | …ebilibili/feature/home/components/FloatingBottomBar.kt | 1 | // Floating bottom bar structure and interactions. Liquid effects use project-local | COMMENT |
| LOW | …i/feature/audio/lyrics/halcyon/AppleMusicLyricsView.kt | 341 | } | COMMENT |
| LOW | …droid/purebilibili/feature/profile/ProfileViewModel.kt | 821 | // 为了演示,这里先留空或模拟一些数据,或者如果 SearchApi 返回结构匹配的话 | COMMENT |
| LOW | …/android/purebilibili/feature/profile/ProfileScreen.kt | 3361 | } | COMMENT |
| LOW | …/android/purebilibili/feature/profile/ProfileScreen.kt | 3381 | // LoggedOut wrapper passes guestUser to MobileProfileContent. | COMMENT |
| LOW | plugins/tools/create-plugin.js | 61 | // BiliPai.http.get(url, headers) / BiliPai.http.post(url, body, headers) | COMMENT |
| LOW | scripts/generate_rovniced_skin_catalog.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 381 | // below). Snapshot map, written only on actual change: a pure back-stack reorder changes | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 461 | // Wire the platform predictive back gesture to the single driver. Enabled only when there is | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 681 | ), | COMMENT |
| LOW | …main/java/top/yukonga/miuix/kmp/nav/core/NavDisplay.kt | 741 | // Boundary ownership (§4.3): the entry's own transition governs while it is at the | COMMENT |
| LOW | …a/top/yukonga/miuix/kmp/nav/gesture/NavSwipeDismiss.kt | 341 | val releaseAnchor = if (anchor.isNaN()) topIndex - animatedTop.value else anchor | COMMENT |
| LOW | …a/top/yukonga/miuix/kmp/nav/gesture/NavSwipeDismiss.kt | 361 | if (settleSink != null) { | COMMENT |
| LOW | …a/top/yukonga/miuix/kmp/nav/gesture/NavSwipeDismiss.kt | 381 | animatedTop.settleTo( | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ebilibili/feature/video/ui/section/VideoInfoSection.kt | 0 | ((https?|ftp|file)://[-a-za-z0-9+&@#/%?=~_|!:,.;]*[-a-za-z0-9+&@#/%=~_|]) | STRING |
| HIGH | …ilibili/feature/video/ui/components/ReplyComponents.kt | 0 | ((https?|ftp|file)://[-a-za-z0-9+&@#/%?=~_|!:,.;]*[-a-za-z0-9+&@#/%=~_|]) | STRING |
| HIGH | …li/feature/dynamic/components/DynamicRichTextPolicy.kt | 0 | ((https?|ftp|file)://[-a-za-z0-9+&@#/%?=~_|!:,.;]*[-a-za-z0-9+&@#/%=~_|]) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/generate.py | 306 | CODE | |
| LOW | artwork/brand-motion/render-cleaning-frames.py | 24 | CODE | |
| LOW | artwork/brand-motion/render-cleaning-frames.py | 54 | CODE | |
| LOW | scripts/augment_skin_catalog_effects.py | 29 | CODE | |
| LOW | scripts/augment_skin_catalog_effects.py | 40 | CODE | |
| LOW | scripts/video_card_transition_curve_probe.py | 68 | CODE | |
| LOW | scripts/video_card_transition_curve_probe.py | 107 | CODE | |
| LOW | scripts/video_card_transition_report.py | 115 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …i/feature/video/screen/VideoDetailScreenStateHolder.kt | 772 | // 🔄 [Seamless Playback] Internal BVID state to support seamless switching in portrait mode | COMMENT |
| MEDIUM | …ature/audio/lyrics/halcyon/AppleCoverFlowBackground.kt | 120 | // single-layer blurred cover (issue #621), keeping the 3-layer fluid flow seamless. | COMMENT |
| MEDIUM | …ature/audio/lyrics/halcyon/AppleCoverFlowBackground.kt | 120 | // single-layer blurred cover (issue #621), keeping the 3-layer fluid flow seamless. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/validate.py | 2 | CODE | |
| LOW | plugins/tools/bilibili_skin_to_bpskin.py | 9 | CODE | |
| LOW | scripts/augment_skin_catalog_effects.py | 4 | CODE | |
| LOW | scripts/video_card_transition_curve_probe.py | 7 | CODE | |
| LOW | scripts/port_halcyon_lyrics.py | 3 | CODE | |
| LOW | scripts/video_card_transition_report.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/video_card_transition_report.py | 225 | "Missing phase data is null, never a zero-jank measurement."]} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/video_card_transition_report.py | 154 | except (KeyError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | artwork/brand-motion/generate.py | 41 | CODE | |
| LOW | scripts/video_card_transition_report.py | 197 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …d/purebilibili/feature/login/LoginAppAuthPolicyTest.kt | 106 | username = "user@example.com", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tv_smoke.py | 131 | except Exception as error: | CODE |