refactor: 优化eslint配置,提升代码质量 (#1341)

* feat: 统一并标准化eslint

* lint: napcat.webui

* lint: napcat.webui

* lint: napcat.core

* build: fix

* lint: napcat.webui

* refactor: 重构eslint

* Update README.md
This commit is contained in:
时瑾
2025-11-03 16:30:45 +08:00
committed by GitHub
parent d5b8f886d6
commit 06f6a542f5
651 changed files with 37981 additions and 37587 deletions

View File

@@ -1,11 +1,11 @@
import { Listbox, ListboxItem } from '@heroui/listbox'
import { Spinner } from '@heroui/spinner'
import { useRequest } from 'ahooks'
import { MdError } from 'react-icons/md'
import { Listbox, ListboxItem } from '@heroui/listbox';
import { Spinner } from '@heroui/spinner';
import { useRequest } from 'ahooks';
import { MdError } from 'react-icons/md';
import IconWrapper from '@/components/github_info/icon_wrapper'
import ItemCounter from '@/components/github_info/item_counter'
import GithubRelease from '@/components/github_info/release'
import IconWrapper from '@/components/github_info/icon_wrapper';
import ItemCounter from '@/components/github_info/item_counter';
import GithubRelease from '@/components/github_info/release';
import {
BookIcon,
BugIcon,
@@ -13,193 +13,197 @@ import {
StarIcon,
TagIcon,
UsersIcon,
WatchersIcon
} from '@/components/icons'
WatchersIcon,
} from '@/components/icons';
import { request } from '@/utils/request'
import { openUrl } from '@/utils/url'
import { request } from '@/utils/request';
import { openUrl } from '@/utils/url';
import type {
GirhubRepo,
GithubContributor,
GithubPullRequest,
GithubRelease as GithubReleaseType
} from '@/types/github'
GithubRelease as GithubReleaseType,
} from '@/types/github';
function displayData(data: number, loading: boolean, error?: Error) {
function displayData (data: number, loading: boolean, error?: Error) {
if (error) {
return <MdError className="text-primary-400" />
return <MdError className='text-primary-400' />;
}
if (loading) {
return <Spinner size="sm" />
return <Spinner size='sm' />;
}
return <ItemCounter number={data} />
return <ItemCounter number={data} />;
}
export default function NapCatRepoInfo() {
export default function NapCatRepoInfo () {
// repo info
const {
data: repoOriData,
error: repoError,
loading: repoLoading
loading: repoLoading,
} = useRequest(() =>
request.get<GirhubRepo>('https://api.github.com/repos/NapNeko/NapCatQQ')
)
);
// release info
const {
data: releaseOriData,
error: releaseError,
loading: releaseLoading
loading: releaseLoading,
} = useRequest(() =>
request.get<GithubReleaseType[]>(
'https://api.github.com/repos/NapNeko/NapCatQQ/releases'
)
)
);
// pr info
const {
data: prData,
error: prError,
loading: prLoading
loading: prLoading,
} = useRequest(() =>
request.get<GithubPullRequest[]>(
'https://api.github.com/repos/NapNeko/NapCatQQ/pulls'
)
)
);
// contributors info
const {
data: contributorsData,
error: contributorsError,
loading: contributorsLoading
loading: contributorsLoading,
} = useRequest(() =>
request.get<GithubContributor[]>(
'https://api.github.com/repos/NapNeko/NapCatQQ/contributors'
)
)
);
const repoData = repoOriData?.data
const releaseData = releaseOriData?.data?.[0]
const prCount = prData?.data?.length || 0
const contributorsCount = contributorsData?.data?.length || 0
const repoData = repoOriData?.data;
const releaseData = releaseOriData?.data?.[0];
const prCount = prData?.data?.length || 0;
const contributorsCount = contributorsData?.data?.length || 0;
const releaseCount = releaseOriData?.data?.length || 0
const releaseCount = releaseOriData?.data?.length || 0;
return (
<Listbox
aria-label="NapCat Repo Info"
className="p-0 gap-0 divide-y divide-default-300/50 dark:divide-default-100/80 bg-content1 max-w-[300px] overflow-visible shadow-small rounded-medium bg-opacity-50 backdrop-blur-sm"
aria-label='NapCat Repo Info'
className='p-0 gap-0 divide-y divide-default-300/50 dark:divide-default-100/80 bg-content1 max-w-[300px] overflow-visible shadow-small rounded-medium bg-opacity-50 backdrop-blur-sm'
itemClasses={{
base: 'px-3 first:rounded-t-medium last:rounded-b-medium rounded-none gap-3 h-12 data-[hover=true]:bg-default-100/80'
base: 'px-3 first:rounded-t-medium last:rounded-b-medium rounded-none gap-3 h-12 data-[hover=true]:bg-default-100/80',
}}
onAction={(key: React.Key) => {
switch (key) {
case 'releases':
openUrl('https://github.com/NapNeko/NapCatQQ/releases', true)
break
openUrl('https://github.com/NapNeko/NapCatQQ/releases', true);
break;
case 'contributors':
openUrl(
'https://github.com/NapNeko/NapCatQQ/graphs/contributors',
true
)
break
);
break;
case 'license':
openUrl(
'https://github.com/NapNeko/NapCatQQ/blob/main/LICENSE',
true
)
break
);
break;
case 'watchers':
openUrl('https://github.com/NapNeko/NapCatQQ/watchers', true)
break
openUrl('https://github.com/NapNeko/NapCatQQ/watchers', true);
break;
case 'star':
openUrl('https://github.com/NapNeko/NapCatQQ/stargazers', true)
break
openUrl('https://github.com/NapNeko/NapCatQQ/stargazers', true);
break;
case 'issues':
openUrl('https://github.com/NapNeko/NapCatQQ/issues', true)
break
openUrl('https://github.com/NapNeko/NapCatQQ/issues', true);
break;
case 'pull_requests':
openUrl('https://github.com/NapNeko/NapCatQQ/pulls', true)
break
openUrl('https://github.com/NapNeko/NapCatQQ/pulls', true);
break;
default:
openUrl('https://github.com/NapNeko/NapCatQQ', true)
openUrl('https://github.com/NapNeko/NapCatQQ', true);
}
}}
>
<ListboxItem
key="star"
key='star'
endContent={displayData(
repoData?.stargazers_count ?? 0,
false,
repoError
)}
startContent={
<IconWrapper className="bg-success/10 text-success">
<StarIcon className="text-lg" />
<IconWrapper className='bg-success/10 text-success'>
<StarIcon className='text-lg' />
</IconWrapper>
}
>
Star
</ListboxItem>
<ListboxItem
key="issues"
key='issues'
endContent={displayData(
repoData?.open_issues_count ?? 0,
false,
repoError
)}
startContent={
<IconWrapper className="bg-success/10 text-success">
<BugIcon className="text-lg" />
<IconWrapper className='bg-success/10 text-success'>
<BugIcon className='text-lg' />
</IconWrapper>
}
>
Issues
</ListboxItem>
<ListboxItem
key="pull_requests"
key='pull_requests'
endContent={displayData(prCount, prLoading, prError)}
startContent={
<IconWrapper className="bg-primary/10 text-primary">
<PullRequestIcon className="text-lg" />
<IconWrapper className='bg-primary/10 text-primary'>
<PullRequestIcon className='text-lg' />
</IconWrapper>
}
>
Pull Requests
</ListboxItem>
<ListboxItem
key="releases"
className="group h-auto py-3"
key='releases'
className='group h-auto py-3'
endContent={
releaseError ? (
<MdError className="text-primary-400" />
) : releaseLoading ? (
<Spinner size="sm" />
) : (
<ItemCounter number={releaseCount} />
)
releaseError
? (
<MdError className='text-primary-400' />
)
: releaseLoading
? (
<Spinner size='sm' />
)
: (
<ItemCounter number={releaseCount} />
)
}
startContent={
<IconWrapper className="bg-primary/10 text-primary">
<TagIcon className="text-lg" />
<IconWrapper className='bg-primary/10 text-primary'>
<TagIcon className='text-lg' />
</IconWrapper>
}
textValue="Releases"
textValue='Releases'
>
{releaseData && <GithubRelease releaseData={releaseData} />}
</ListboxItem>
<ListboxItem
key="contributors"
key='contributors'
endContent={displayData(
contributorsCount,
contributorsLoading,
contributorsError
)}
startContent={
<IconWrapper className="bg-warning/10 text-warning">
<IconWrapper className='bg-warning/10 text-warning'>
<UsersIcon />
</IconWrapper>
}
@@ -207,14 +211,14 @@ export default function NapCatRepoInfo() {
Contributors
</ListboxItem>
<ListboxItem
key="watchers"
key='watchers'
endContent={displayData(
repoData?.watchers_count ?? 0,
repoLoading,
repoError
)}
startContent={
<IconWrapper className="bg-default/50 text-foreground">
<IconWrapper className='bg-default/50 text-foreground'>
<WatchersIcon />
</IconWrapper>
}
@@ -222,14 +226,14 @@ export default function NapCatRepoInfo() {
Watchers
</ListboxItem>
<ListboxItem
key="license"
key='license'
endContent={
<span className="text-small text-default-400">
<span className='text-small text-default-400'>
{repoData?.license?.name ?? 'unknown'}
</span>
}
startContent={
<IconWrapper className="bg-primary/10 text-primary dark:text-primary-500">
<IconWrapper className='bg-primary/10 text-primary dark:text-primary-500'>
<BookIcon />
</IconWrapper>
}
@@ -237,5 +241,5 @@ export default function NapCatRepoInfo() {
License
</ListboxItem>
</Listbox>
)
);
}