Repository Analysis

tusen-ai/naive-ui

A Vue 3 Component Library. Fairly Complete. Theme Customizable. Uses TypeScript. Fast.

0.7 Likely human-written View on GitHub
0.7
Adjusted Score
0.7
Raw Score
100%
Time Factor
2026-05-13
Last Push
18,346
Stars
TypeScript
Language
246,406
Lines of Code
3489
Files
172
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 1LOW 171

Pattern Findings

172 matches across 5 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers89 hits · 94 pts
SeverityFileLineSnippet
LOWdemo/SiteHeader.vue221 function handleConfigProviderUpdate() {
LOWdemo/store/menu-options.js92export function createDocumentationMenuOptions({ lang, theme }) {
LOWdemo/store/menu-options.js225export function createComponentMenuOptions({ lang, theme }) {
LOWscripts/release-changelog.ts22async function releaseChangelogToDingTalk(): Promise<void> {
LOWscripts/release-changelog.ts80async function releaseChangelogToDiscord(): Promise<void> {
LOWscripts/gen-component-declaration.ts16function parseComponentsDeclaration(code: string): Record<string, string> {
LOWscripts/post-build/gen-web-types.ts313 function extractComponentDescription(): string | undefined {
LOWscripts/utils/loader.ts124async function transformMdToVueAndUpdateEntryFile(
LOWscripts/utils/loader.ts168export async function convertFilesByComponentName(
LOWsrc/tabs/src/Tabs.tsx318 function updateCurrentScrollPosition(): void {
LOWsrc/tabs/src/Tabs.tsx454 function updateBarPositionInstantly(): void {
LOWsrc/tree/demos/enUS/switcher-icon.demo.vue46function renderSwitcherIconWithExpaned({ expanded }: { expanded: boolean }) {
LOWsrc/tree/demos/zhCN/switcher-icon.demo.vue44function renderSwitcherIconWithExpaned({ expanded }: { expanded: boolean }) {
LOWsrc/tree/src/Tree.tsx922 function doUpdateIndeterminateKeys(
LOWsrc/_utils/vue/resolve-slot.ts58export function resolveWrappedSlotWithProps(
LOWsrc/_utils/composable/use-collection.ts14export function useInjectionInstanceCollection(
LOWsrc/_utils/composable/use-collection.ts99export function useInjectionElementCollection(
LOWsrc/_internal/select-menu/src/SelectMenu.tsx174 function clearPendingNodeIfInvalid(): void {
LOWsrc/tree-select/src/TreeSelect.tsx417 function doUpdateIndeterminateKeys(
LOWsrc/tree-select/src/TreeSelect.tsx566 function handleUpdateIndeterminateKeys(keys: Key[]): void {
LOWsrc/tree-select/src/TreeSelect.tsx750 function handleTriggerOrMenuResize(): void {
LOWsrc/form/demos/enUS/top.demo.vue138function handleValidateButtonClick(e: MouseEvent) {
LOWsrc/form/demos/enUS/custom-rule.demo.vue33function validatePasswordStartWith(rule: FormItemRule, value: string): boolean {
LOWsrc/form/demos/enUS/custom-rule.demo.vue95function handleValidateButtonClick(e: MouseEvent) {
LOWsrc/form/demos/enUS/left.demo.vue123function handleValidateButtonClick(e: MouseEvent) {
LOWsrc/form/demos/zhCN/top.demo.vue141function handleValidateButtonClick(e: MouseEvent) {
LOWsrc/form/demos/zhCN/custom-rule.demo.vue27function validatePasswordStartWith(rule: FormItemRule, value: string): boolean {
LOWsrc/form/demos/zhCN/custom-rule.demo.vue89function handleValidateButtonClick(e: MouseEvent) {
LOWsrc/form/demos/zhCN/left.demo.vue123function handleValidateButtonClick(e: MouseEvent) {
LOWsrc/input-number/src/InputNumber.tsx589 function handleUpdateDisplayedValue(value: string): void {
LOWsrc/auto-complete/src/utils.ts12export function mapAutoCompleteOptionsToSelectOptions(
LOWsrc/auto-complete/src/utils.ts18function convertAutoCompleteOptionToSelectOption(
LOWsrc/time-picker/src/TimePicker.tsx245 function getTimestampFromFormattedValue(
LOWsrc/time-picker/src/TimePicker.tsx652 function handleTimeInputDeactivate(): void {
LOWsrc/time-picker/src/TimePicker.tsx718 function handleTimeInputUpdateValue(v: string): void {
LOWsrc/input/src/Input.tsx708 function handlePasswordToggleClick(): void {
LOWsrc/input/src/Input.tsx715 function handlePasswordToggleMousedown(e: MouseEvent): void {
LOWsrc/input/src/Input.tsx749 function handleWrapperKeydownEnter(e: KeyboardEvent): void {
LOWsrc/input/src/Input.tsx846 function handleTextAreaMirrorResize(): void {
LOWsrc/_styles/transitions/fade-in-height-expand.cssr.ts22export function fadeInHeightExpandTransition({
LOWsrc/_styles/transitions/slide-in-from-right.ts13export function slideInFromRightTransition({
LOWsrc/_styles/transitions/slide-in-from-left.ts13export function slideInFromLeftTransition({
LOWsrc/_styles/transitions/fade-up-width-expand.cssr.ts11export function fadeUpWidthExpandTransition({
LOWsrc/_styles/transitions/slide-in-from-bottom.ts13export function slideInFromBottomTransition({
LOWsrc/_styles/transitions/fade-in-width-expand.cssr.ts12export function fadeInWidthExpandTransition({
LOWsrc/legacy-transfer/src/use-transfer-data.ts152 function handleSrcFilterUpdateValue(value: string | null): void {
LOWsrc/legacy-transfer/src/use-transfer-data.ts155 function handleTgtFilterUpdateValue(value: string | null): void {
LOWsrc/discrete/demos/enUS/basic.demo.vue30function handleMessageTriggerClick() {
LOWsrc/discrete/demos/enUS/basic.demo.vue34function handleNotificationTriggerClick() {
LOWsrc/discrete/demos/enUS/basic.demo.vue49function handleLoadingBarTriggerClick() {
LOWsrc/discrete/demos/zhCN/basic.demo.vue30function handleMessageTriggerClick() {
LOWsrc/discrete/demos/zhCN/basic.demo.vue34function handleNotificationTriggerClick() {
LOWsrc/discrete/demos/zhCN/basic.demo.vue49function handleLoadingBarTriggerClick() {
LOWsrc/cascader/src/Cascader.tsx626 function handleCascaderMenuClickOutside(e: MouseEvent): void {
LOWsrc/cascader/src/Cascader.tsx639 function handleSelectMenuClickOutside(e: MouseEvent): void {
LOWsrc/cascader/src/CascaderOption.tsx140 function handleCheckboxUpdateValue(): void {
LOWsrc/transfer/src/use-transfer-data.ts134 function handleSrcFilterUpdateValue(value: string | null): void {
LOWsrc/transfer/src/use-transfer-data.ts138 function handleTgtFilterUpdateValue(value: string | null): void {
LOWsrc/slider/src/Slider.tsx253 function shouldKeepTooltipTransition(index: number): boolean {
LOWsrc/date-picker/src/utils.ts33function getDerivedTimeFromKeyboardEvent(
29 more matches not shown…
Over-Commented Block57 hits · 57 pts
SeverityFileLineSnippet
LOWdesign-notes/think.md301
LOW.github/FUNDING.yml1# These are supported funding model platforms
LOWsrc/tabs/src/styles/index.cssr.ts1import { c, cB, cE, cM, cNotM } from '../../../_utils/cssr'
LOWsrc/tabs/src/styles/index.cssr.ts21// --n-tab-color
LOWsrc/tree/src/styles/index.cssr.ts1import { fadeInHeightExpandTransition } from '../../../_styles/transitions/fade-in-height-expand.cssr'
LOWsrc/_internal/selection/src/styles/index.cssr.ts1import {
LOWsrc/_internal/selection/src/styles/index.cssr.ts21// --n-color-active
LOWsrc/tree-select/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/dropdown/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/drawer/src/styles/index.cssr.ts1import { fadeInTransition } from '../../../_styles/transitions/fade-in.cssr'
LOWsrc/drawer/src/styles/index.cssr.ts21// --n-title-text-color
LOWsrc/pagination/src/styles/index.cssr.ts21// --n-input-margin
LOWsrc/pagination/src/styles/index.cssr.ts41// --n-jumper-text-color
LOWsrc/form/src/styles/form-item.cssr.ts1import { fadeDownTransition } from '../../../_styles/transitions/fade-down.cssr'
LOWsrc/calendar/src/styles/index.cssr.ts1import { c, cB, cE, cM, insideModal, insidePopover } from '../../../_utils/cssr'
LOWsrc/radio/src/styles/radio.cssr.ts1import { c, cB, cE, cM, cNotM } from '../../../_utils/cssr'
LOWsrc/card/src/styles/index.cssr.ts21// --n-padding-left
LOWsrc/locales/index.spec.tsx81 setup() {
LOWsrc/progress/src/styles/index.cssr.ts1import { c, cB, cM } from '../../../_utils/cssr'
LOWsrc/time-picker/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/input/src/styles/input.cssr.ts1import { c, cB, cE, cM, cNotM } from '../../../_utils/cssr'
LOWsrc/input/src/styles/input.cssr.ts21// --n-line-height-textarea
LOWsrc/notification/src/styles/index.cssr.ts1import type { CNode } from 'css-render'
LOWsrc/notification/src/styles/index.cssr.ts21// --n-close-icon-size
LOWsrc/alert/src/styles/index.cssr.ts1import { fadeInHeightExpandTransition } from '../../../_styles/transitions/fade-in-height-expand.cssr'
LOWsrc/cascader/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/checkbox/src/styles/index.cssr.ts1import { iconSwitchTransition } from '../../../_styles/transitions/icon-switch.cssr'
LOWsrc/code/src/styles/index.cssr.ts1import { c, cB, cE, cM } from '../../../_utils/cssr'
LOWsrc/descriptions/src/styles/index.cssr.ts1import { c, cB, cE, cM, cNotM, insideModal, insidePopover } from '../../../_utils/cssr'
LOWsrc/slider/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/slider/src/styles/index.cssr.ts21// --n-handle-box-shadow-hover
LOWsrc/message/src/styles/index.cssr.ts1import { fadeInHeightExpandTransition } from '../../../_styles/transitions/fade-in-height-expand.cssr'
LOWsrc/message/src/styles/index.cssr.ts21// --n-icon-color-loading
LOWsrc/collapse/src/styles/index.cssr.ts1import { fadeInHeightExpandTransition } from '../../../_styles/transitions/fade-in-height-expand.cssr'
LOWsrc/back-top/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/qr-code/src/qrcodegen.ts181 // The index of the mask pattern used in this QR Code, which is between 0 and 7 (inclusive).
LOWsrc/dialog/src/styles/index.cssr.ts1import { asModal, c, cB, cE, cM, insideModal } from '../../../_utils/cssr'
LOWsrc/button/src/styles/index.cssr.ts1import { fadeInWidthExpandTransition } from '../../../_styles/transitions/fade-in-width-expand.cssr'
LOWsrc/button/src/styles/index.cssr.ts21// --n-border
LOWsrc/steps/src/styles/index.cssr.ts1import { iconSwitchTransition } from '../../../_styles/transitions/icon-switch.cssr'
LOWsrc/date-picker/src/styles/index.cssr.ts1import { fadeInScaleUpTransition } from '../../../_styles/transitions/fade-in-scale-up.cssr'
LOWsrc/date-picker/src/styles/index.cssr.ts21// --n-calendar-right-padding
LOWsrc/date-picker/src/styles/index.cssr.ts41// --n-item-size
LOWsrc/table/src/styles/index.cssr.ts1import { c, cB, cM, cNotM, insideModal, insidePopover } from '../../../_utils/cssr'
LOWsrc/page-header/src/styles/index.cssr.ts1import { c, cB, cE } from '../../../_utils/cssr'
LOWsrc/list/src/styles/index.cssr.ts1import { c, cB, cE, cM, insideModal, insidePopover } from '../../../_utils/cssr'
LOWsrc/menu/src/styles/index.cssr.ts41// vars:
LOWsrc/menu/src/styles/index.cssr.ts61// --n-item-text-color-active-hover
LOWsrc/mention/tests/Mention.spec.ts181 wrapper.unmount()
LOWsrc/switch/src/styles/index.cssr.ts1import { iconSwitchTransition } from '../../../_styles/transitions/icon-switch.cssr'
LOWsrc/anchor/src/styles/index.cssr.ts1import { c, cB, cE, cM, cNotM } from '../../../_utils/cssr'
LOWsrc/breadcrumb/src/styles/index.cssr.ts1import { c, cB, cE, cM } from '../../../_utils/cssr'
LOWsrc/timeline/src/styles/index.cssr.ts1import { c, cB, cE, cM } from '../../../_utils/cssr'
LOWsrc/tag/src/styles/index.cssr.ts1import { c, cB, cE, cM, cNotM } from '../../../_utils/cssr'
LOWsrc/data-table/src/styles/index.cssr.ts1import type { CNode } from 'css-render'
LOWsrc/data-table/src/styles/index.cssr.ts21// --n-th-color-modal
LOWsrc/data-table/src/styles/index.cssr.ts41// --n-th-icon-color-active
Fake / Example Data24 hits · 29 pts
SeverityFileLineSnippet
LOWsrc/result/demos/enUS/custom.demo.vue10 description="Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."
LOWsrc/result/demos/enUS/custom.demo.vue10 description="Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."
LOWsrc/result/demos/enUS/custom.demo.vue14 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
LOWsrc/result/demos/enUS/custom.demo.vue14 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
LOWsrc/card/demos/enUS/loading.demo.vue20 Lorem Ipsum
LOWsrc/card/demos/enUS/loading.demo.vue25 Lorem ipsum dolor sit amet,<br>
LOWsrc/card/demos/enUS/loading.demo.vue25 Lorem ipsum dolor sit amet,<br>
LOWsrc/highlight/tests/utils.spec.ts153 { text: 'user@example.com', isMatch: true },
LOWsrc/message/demos/enUS/customize-message.demo.vue20 title: 'Lorem ipsum dolor sit amet',
LOWsrc/message/demos/enUS/customize-message.demo.vue20 title: 'Lorem ipsum dolor sit amet',
LOWsrc/message/demos/enUS/customize-message.demo.vue36 error('Lorem ipsum dolor sit amet, consectetur adipiscing elit', {
LOWsrc/message/demos/enUS/customize-message.demo.vue36 error('Lorem ipsum dolor sit amet, consectetur adipiscing elit', {
LOWsrc/popover/demos/zhCN/nested-debug.demo.vue9 'Lorem ipsum, dolor sit amet consectetur adipisicing elit. Vero eveniet exercitationem quasi. Sequi quia natus quam ip
LOWsrc/popover/demos/zhCN/nested-debug.demo.vue9 'Lorem ipsum, dolor sit amet consectetur adipisicing elit. Vero eveniet exercitationem quasi. Sequi quia natus quam ip
LOWsrc/list/demos/enUS/hoverable.demo.vue19 Lorem ipsum dolor sit amet,<br>
LOWsrc/list/demos/enUS/hoverable.demo.vue19 Lorem ipsum dolor sit amet,<br>
LOWsrc/list/demos/enUS/hoverable.demo.vue28 <n-thing title="Lorem Ipsum" content-style="margin-top: 10px;">
LOWsrc/list/demos/enUS/hoverable.demo.vue39 Lorem ipsum dolor sit amet,<br>
LOWsrc/list/demos/enUS/hoverable.demo.vue39 Lorem ipsum dolor sit amet,<br>
LOWsrc/ellipsis/demos/enUS/custom-tooltip.demo.vue13 <i>Lorem Ipsum</i><br>
LOWsrc/ellipsis/demos/enUS/expand-trigger.demo.vue9 Lorem ipsum dolor sit amet,<br>
LOWsrc/ellipsis/demos/enUS/expand-trigger.demo.vue9 Lorem ipsum dolor sit amet,<br>
LOWsrc/ellipsis/demos/enUS/line-clamp.demo.vue9 Lorem ipsum dolor sit amet,<br>
LOWsrc/ellipsis/demos/enUS/line-clamp.demo.vue9 Lorem ipsum dolor sit amet,<br>
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMsrc/dynamic-input/src/DynamicInput.tsx59 // TODO: make it robust for different types
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippet
LOWsrc/tree-select/src/TreeSelect.tsx718 // If there's an action slot later, we need to check if mousedown happens