facebook / react
Duplication

Places in code with 6 or more lines that are exactly the same.

Intro
  • For duplication, we look at places in code where there are 6 or more lines of code that are exactly the same.
  • Before duplication is calculated, the code is cleaned to remove empty lines, comments, and frequently duplicated constructs such as imports.
  • You should aim at having as little as possible (<5%) of duplicated code as high-level of duplication can lead to maintenance difficulties, poor factoring, and logical contradictions.
Learn more...
Duplication Overall
  • 59% duplication:
    • 90,855 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
    • 54,130 duplicated lines
  • 9,921 duplicates
system59% (54,130 lines)
Duplication per Extension
js63% (53,109 lines)
html20% (596 lines)
css11% (366 lines)
h8% (38 lines)
cpp4% (21 lines)
Duplication per Component (primary)
packages/react-reconciler98% (35,645 lines)
scripts/bench51% (7,706 lines)
fixtures/legacy-jsx-runtimes98% (4,653 lines)
packages/react46% (1,207 lines)
scripts/rollup30% (987 lines)
packages/scheduler45% (598 lines)
packages/shared33% (541 lines)
fixtures/dom12% (514 lines)
packages/react-devtools-shared14% (340 lines)
scripts/jest21% (329 lines)
fixtures/packaging48% (214 lines)
fixtures/devtools15% (177 lines)
scripts/release8% (143 lines)
packages/dom-event-testing-library17% (136 lines)
fixtures/scheduler15% (100 lines)
packages/react-devtools-shell48% (89 lines)
fixtures/concurrent16% (74 lines)
packages/react-dom36% (71 lines)
packages/react-is100% (62 lines)
scripts/perf-counters6% (59 lines)
fixtures/flight6% (51 lines)
packages/eslint-plugin-react-hooks3% (47 lines)
fixtures/blocks12% (41 lines)
fixtures/ssr14% (39 lines)
fixtures/ssr29% (34 lines)
packages/react-devtools-timeline19% (32 lines)
ROOT11% (30 lines)
fixtures/attribute-behavior1% (30 lines)
scripts/eslint-rules4% (28 lines)
fixtures/fiber-debugger3% (24 lines)
packages/jest-react12% (22 lines)
scripts/merge-fork13% (22 lines)
scripts/flow9% (20 lines)
fixtures/stacks7% (13 lines)
scripts/devtools2% (10 lines)
fixtures/fiber-triangle4% (9 lines)
fixtures/flight-browser10% (9 lines)
fixtures/fizz-ssr-browser16% (8 lines)
fixtures/expiration17% (8 lines)
packages/use-sync-external-store4% (8 lines)
scripts/tasks0% (0 lines)
scripts/prettier0% (0 lines)
scripts/shared0% (0 lines)
scripts/yarn0% (0 lines)
scripts/babel0% (0 lines)
scripts/error-codes0% (0 lines)
scripts/print-warnings0% (0 lines)
scripts/eslint0% (0 lines)
packages/react-devtools-inline0% (0 lines)
packages/create-subscription0% (0 lines)
packages/react-server0% (0 lines)
packages/react-fetch0% (0 lines)
packages/react-fs0% (0 lines)
packages/react-server-dom-webpack0% (0 lines)
packages/react-devtools0% (0 lines)
packages/react-devtools-extensions0% (0 lines)
packages/jest-mock-scheduler0% (0 lines)
packages/react-pg0% (0 lines)
packages/react-client0% (0 lines)
packages/use-subscription0% (0 lines)
fixtures/art0% (0 lines)
fixtures/eslint0% (0 lines)
fixtures/nesting0% (0 lines)

Duplication Between Components (50+ lines)

G fixtures/legacy-jsx-runtimes fixtures/legacy-jsx-runtimes scripts/jest scripts/jest fixtures/legacy-jsx-runtimes--scripts/jest 378 packages/react packages/react fixtures/legacy-jsx-runtimes--packages/react 310 packages/shared packages/shared fixtures/legacy-jsx-runtimes--packages/shared 207 fixtures/dom fixtures/dom fixtures/dom--fixtures/legacy-jsx-runtimes 314 fixtures/dom--scripts/jest 329 packages/react-reconciler packages/react-reconciler packages/react-reconciler--packages/react 112 fixtures/ssr fixtures/ssr fixtures/ssr2 fixtures/ssr2 fixtures/ssr--fixtures/ssr2 68 packages/react-devtools-shared packages/react-devtools-shared packages/react-devtools-timeline packages/react-devtools-timeline packages/react-devtools-shared--packages/react-devtools-timeline 65 fixtures/devtools fixtures/devtools packages/react-devtools-shell packages/react-devtools-shell fixtures/devtools--packages/react-devtools-shell 58 packages/react-dom packages/react-dom packages/react-dom--packages/react-reconciler 55

Download: SVG DOT (open online Graphviz editor)

Open 3D force graph...

Show more details on duplication between components...
Longest Duplicates
The list of 50 longest duplicates.
See data for all 9,921 duplicates...
Size#FoldersFilesLinesCode
2556 x 2 packages/react-reconciler/src
packages/react-reconciler/src
261:4049 (92%)
261:4049 (92%)
view
1973 x 2 packages/react-reconciler/src
packages/react-reconciler/src
165:3151 (94%)
165:3151 (94%)
view
1658 x 2 packages/react-reconciler/src
packages/react-reconciler/src
247:3130 (90%)
247:3130 (90%)
view
1640 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1649:3587 (61%)
1649:3587 (61%)
view
943 x 2 packages/react-reconciler/src
packages/react-reconciler/src
117:1653 (35%)
117:1653 (35%)
view
909 x 2 packages/react-reconciler/src
packages/react-reconciler/src
46:1402 (98%)
46:1402 (98%)
view
895 x 2 packages/react-reconciler/src
packages/react-reconciler/src
83:1283 (95%)
83:1283 (95%)
view
881 x 2 packages/react-reconciler/src
packages/react-reconciler/src
171:1608 (87%)
171:1608 (87%)
view
624 x 2 fixtures/legacy-jsx-runtimes/react-17/cjs
fixtures/legacy-jsx-runtimes/react-17/cjs
10:1195 (99%)
10:1195 (98%)
view
548 x 2 packages/react-reconciler/src
packages/react-reconciler/src
77:872 (92%)
77:872 (92%)
view
537 x 2 fixtures/legacy-jsx-runtimes/react-16/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
10:881 (99%)
10:885 (98%)
view
524 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-15/cjs
10:858 (99%)
10:862 (98%)
view
521 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-14/cjs
10:853 (99%)
10:857 (98%)
view
517 x 2 packages/react-reconciler/src
packages/react-reconciler/src
19:873 (99%)
19:873 (99%)
view
501 x 2 packages/react-reconciler/src
packages/react-reconciler/src
102:790 (88%)
102:790 (88%)
view
468 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-15/cjs
100:882 (88%)
105:887 (87%)
view
462 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-15/cjs
101:860 (88%)
106:865 (87%)
view
459 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-15/cjs
101:853 (87%)
105:862 (86%)
view
459 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-15/cjs
100:857 (86%)
106:858 (87%)
view
441 x 2 packages/react-reconciler/src
packages/react-reconciler/src
84:681 (88%)
84:681 (88%)
view
414 x 2 packages/react-reconciler/src
packages/react-reconciler/src
36:710 (96%)
36:710 (96%)
view
376 x 2 packages/react-reconciler/src
packages/react-reconciler/src
117:691 (96%)
117:691 (96%)
view
330 x 2 packages/react-reconciler/src
packages/react-reconciler/src
37:537 (96%)
37:537 (96%)
view
316 x 2 packages/react-reconciler/src
packages/react-reconciler/src
27:483 (98%)
27:483 (98%)
view
274 x 2 packages/react-reconciler/src
packages/react-reconciler/src
13:370 (100%)
13:370 (100%)
view
273 x 2 packages/react-reconciler/src
packages/react-reconciler/src
90:598 (83%)
90:598 (83%)
view
217 x 2 packages/scheduler/src/forks
packages/scheduler/src/forks
106:422 (57%)
89:405 (49%)
view
214 x 2 packages/react-reconciler/src
packages/react-reconciler/src
21:341 (100%)
21:341 (100%)
view
170 x 2 fixtures/legacy-jsx-runtimes
scripts/jest/matchers
61:303 (83%)
27:269 (90%)
view
140 x 2 packages/react-reconciler/src
packages/react-reconciler/src
52:242 (88%)
52:242 (88%)
view
137 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
646:882 (25%)
674:910 (25%)
view
137 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
651:887 (25%)
674:910 (25%)
view
131 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
647:865 (24%)
670:888 (24%)
view
131 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
642:860 (25%)
670:888 (24%)
view
130 x 2 packages/react-reconciler/src
packages/react-reconciler/src
13:238 (100%)
13:238 (100%)
view
129 x 2 packages/react-reconciler/src
packages/react-reconciler/src
12:198 (100%)
12:198 (100%)
view
128 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
647:858 (24%)
674:885 (23%)
view
128 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
651:862 (24%)
670:881 (23%)
view
128 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
642:853 (24%)
674:885 (23%)
view
128 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
646:857 (24%)
670:881 (23%)
view
123 x 2 packages/react-reconciler/src
packages/react-reconciler/src
30:201 (92%)
30:201 (92%)
view
119 x 2 packages/react-reconciler/src
packages/react-reconciler/src
67:284 (100%)
67:284 (100%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
360:499 (20%)
381:520 (20%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
359:498 (20%)
381:520 (20%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
359:498 (20%)
385:524 (19%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
364:503 (20%)
385:524 (19%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
355:494 (20%)
381:520 (20%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-14/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
355:494 (20%)
385:524 (19%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
360:499 (20%)
385:524 (19%)
view
108 x 2 fixtures/legacy-jsx-runtimes/react-15/cjs
fixtures/legacy-jsx-runtimes/react-16/cjs
364:503 (20%)
381:520 (20%)
view
Duplicated Units
The list of top 50 duplicated units.
See data for all 557 unit duplicates...
Size#FoldersFilesLinesCode
558 x 2 packages/react-reconciler/src
packages/react-reconciler/src
831:1606 
831:1606 
view
289 x 2 packages/react-reconciler/src
packages/react-reconciler/src
685:1016 
685:1016 
view
236 x 2 packages/react-reconciler/src
packages/react-reconciler/src
3774:4047 
3774:4047 
view
224 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1975:2336 
1975:2336 
view
213 x 2 packages/react-reconciler/src
packages/react-reconciler/src
2051:2340 
2051:2340 
view
210 x 2 packages/react-reconciler/src
packages/react-reconciler/src
362:580 
362:580 
view
181 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1811:2021 
1811:2021 
view
180 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1676:1891 
1676:1891 
view
157 x 2 packages/react-reconciler/src
packages/react-reconciler/src
592:768 
592:768 
view
152 x 2 packages/react-reconciler/src
packages/react-reconciler/src
917:1117 
917:1117 
view
147 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1093:1275 
1093:1275 
view
145 x 2 packages/react-reconciler/src
packages/react-reconciler/src
3562:3772 
3562:3772 
view
136 x 2 packages/react-reconciler/src
packages/react-reconciler/src
457:656 
457:656 
view
135 x 2 packages/react-reconciler/src
packages/react-reconciler/src
926:1090 
926:1090 
view
119 x 2 packages/react-reconciler/src
packages/react-reconciler/src
430:596 
430:596 
view
113 x 2 packages/react-reconciler/src
packages/react-reconciler/src
750:915 
750:915 
view
111 x 2 packages/react-reconciler/src
packages/react-reconciler/src
754:909 
754:909 
view
110 x 2 packages/react-reconciler/src
packages/react-reconciler/src
368:550 
368:550 
view
108 x 2 packages/react-reconciler/src
packages/react-reconciler/src
637:797 
637:797 
view
108 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1063:1227 
1063:1227 
view
105 x 2 packages/react-reconciler/src
packages/react-reconciler/src
52:171 
52:171 
view
104 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1510:1626 
1510:1626 
view
103 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1080:1204 
1080:1204 
view
112 x 2 packages/react-reconciler/src
packages/react-reconciler/src
98:225 
98:225 
view
100 x 2 packages/react-reconciler/src
packages/react-reconciler/src
195:300 
195:300 
view
99 x 2 packages/react-reconciler/src
packages/react-reconciler/src
3133:3256 
3133:3256 
view
98 x 2 packages/react-reconciler/src
packages/react-reconciler/src
220:358 
220:358 
view
96 x 2 packages/react-reconciler/src
packages/react-reconciler/src
393:500 
393:500 
view
94 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1318:1446 
1318:1446 
view
92 x 2 packages/react-reconciler/src
packages/react-reconciler/src
2482:2610 
2482:2610 
view
90 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1208:1306 
1208:1306 
view
89 x 2 packages/react-reconciler/src
packages/react-reconciler/src
723:849 
723:849 
view
116 x 2 packages/react-reconciler/src
packages/react-reconciler/src
2198:2350 
2198:2350 
view
87 x 2 packages/react-reconciler/src
packages/react-reconciler/src
497:593 
497:593 
view
86 x 2 packages/react-reconciler/src
packages/react-reconciler/src
983:1078 
983:1078 
view
98 x 2 fixtures/legacy-jsx-runtimes/react-17/cjs
fixtures/legacy-jsx-runtimes/react-17/cjs
350:501 
350:501 
view
85 x 2 packages/react-reconciler/src
packages/react-reconciler/src
451:549 
451:549 
view
85 x 2 packages/react-reconciler/src
packages/react-reconciler/src
2729:2873 
2729:2873 
view
85 x 2 packages/react-reconciler/src
packages/react-reconciler/src
2672:2773 
2672:2773 
view
83 x 2 packages/react-reconciler/src
packages/react-reconciler/src
352:449 
352:449 
view
83 x 2 packages/react-reconciler/src
packages/react-reconciler/src
826:924 
826:924 
view
82 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1260:1361 
1260:1361 
view
105 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1665:1792 
1665:1792 
view
80 x 2 packages/react-reconciler/src
packages/react-reconciler/src
513:632 
513:632 
view
80 x 2 packages/react-reconciler/src
packages/react-reconciler/src
853:989 
853:989 
view
73 x 2 packages/react-reconciler/src
packages/react-reconciler/src
374:455 
374:455 
view
70 x 2 packages/react-reconciler/src
packages/react-reconciler/src
555:630 
555:630 
view
70 x 2 packages/react-reconciler/src
packages/react-reconciler/src
253:356 
253:356 
view
69 x 2 packages/react-reconciler/src
packages/react-reconciler/src
652:770 
652:770 
view
68 x 2 packages/react-reconciler/src
packages/react-reconciler/src
1206:1301 
1206:1301 
view