2 views

shy3130/tick-stock-panel

TSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源

Python★ 5,176+44 that day#7 on trending

Analyzed September 26, 2026 at 529be95 (main) with jscpd 5.4.0 in 0.7s.

C62.4/100
Project health217,456 lines of code (L)
Duplication74
3.7% in python, tsx, typescript, bash, powershell, javascript, perl
Dead code83
2%
Complexity40
66.8%

The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.

3.76%duplicated code · 6,153 of 163,575 lines
475clones in code
443code files of 807 scanned
3.65%duplicated over all files · 663 clones

The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.

Largest clones in the code

  • 78 lines in 2 placestsx1,087 tokens
    707    <span className="rounded-full bg-blue-400/10 px-2 py-0.5 text-[10px] text-blue-300">强度 {stat.heatScore.toFixed(0)}</span>
    708  </div>
    709  <div className="mt-1.5 flex flex-wrap gap-x-4 gap-y-1 text-xs text-muted">
    710    <span>{stat.count} 只成分</span>
    711    <span className={priceColorClass(stat.avgPct)}>平均 {stat.avgPct != null ? fmtPct(stat.avgPct) : '—'}</span>
    712    <span>上涨占比 {(stat.upRate * 100).toFixed(0)}%</span>
    713    <span>成交额 {fmtBigNum(stat.totalAmount)}</span>
    714    {stat.avgTurnover != null && <span>均换手 {stat.avgTurnover.toFixed(2)}%</span>}
    715  </div>
    716</div>
    

    First 10 of 78 lines.

  • 85 lines in 2 placestsx887 tokens
    552  items: ConceptStat[]
    553  mode: 'up' | 'down'
    554  selectedKey: string | null
    555  onSelect: (key: string) => void
    556  onStockClick: (symbol: string, name?: string, navList?: NavItem[]) => void
    557  activeSymbol: string | null
    558}) {
    559  const toneText = mode === 'up' ? 'text-bull' : 'text-bear'
    560  const toneBorder = mode === 'up' ? 'border-bull/20' : 'border-bear/20'
    561  const toneBg = mode === 'up' ? 'bg-bull/10' : 'bg-bear/10'
    

    First 10 of 85 lines.

  • 36 lines in 4 placestypescript238 tokens
    3408  body: JSON.stringify({ symbol, focus: focus ?? '' }),
    3409})
    3410if (!res.ok) {
    3411  let detail = ''
    3412  try { const j = JSON.parse(await res.text()); detail = j.detail ?? j.message ?? '' } catch { /* ignore */ }
    3413  const msg = detail || `${res.status} ${res.statusText}`
    3414  toast(msg, 'error')
    3415  throw new Error(msg)
    3416}
    3417if (!res.body) throw new Error('响应无 body')
    

    First 10 of 36 lines.

7 more
Largest clones over all files, tests and data included
By format, code only
FormatFilesLinesClonesDuplicated linesDuplication
python21086,0722462,7203.16%
tsx16064,1921952,7484.28%
typescript6011,696336795.81%
javascript1293162.05%
bash10847000%
powershell1301000%
perl1174000%
By format, all files
FormatFilesLinesClonesDuplicated linesDuplication
python489139,2324134,6163.32%
tsx16865,0442012,7954.3%
typescript6712,110367005.78%
markdown297,1295530.74%
markup1029655719.26%
bash16911130.33%
yaml96001538.83%
javascript1293162.05%
powershell1301000%
text8251000%

Trending appearances

DayRankStarsFilesLinesClonesAll filesCodeHealthCommit
Sep 26, 2026#75,176 (+44)807226,7276633.65%3.76%C 62.4529be95

Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.