apple / swift-package-manager
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
  • 7% duplication:
    • 45,465 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
    • 3,570 duplicated lines
  • 375 duplicates
system7% (3,570 lines)
Duplication per Extension
swift7% (3,456 lines)
c12% (90 lines)
m72% (16 lines)
mm100% (8 lines)
Duplication per Component (primary)
Sources/PackageDescription25% (490 lines)
Sources/Workspace7% (415 lines)
Sources/SPMTestSupport12% (331 lines)
Fixtures/Miscellaneous24% (286 lines)
Sources/PackageCollections8% (269 lines)
Sources/PackageCollectionsSigning11% (190 lines)
Sources/PackageModel6% (189 lines)
Sources/Commands3% (169 lines)
Sources/PackageRegistry16% (134 lines)
Sources/PackageLoading4% (130 lines)
Sources/PackagePlugin13% (126 lines)
Sources/XCBuildSupport3% (94 lines)
Sources/PackageCollectionsSigningLibc11% (90 lines)
Sources/Xcodeproj5% (89 lines)
Sources/Basics4% (87 lines)
Fixtures/DependencyResolution21% (84 lines)
Sources/SPMBuildCore7% (81 lines)
Sources/LLBuildManifest15% (78 lines)
Fixtures/Resources69% (62 lines)
Sources/Build1% (50 lines)
Sources/SourceControl4% (40 lines)
Sources/PackageCollectionsModel13% (36 lines)
Sources/PackageGraph<1% (16 lines)
ROOT3% (14 lines)
Sources/SPMPackageEditor3% (14 lines)
Sources/PackageFingerprint3% (6 lines)
Fixtures/CFamilyTargets0% (0 lines)
Fixtures/ModuleMaps0% (0 lines)
Fixtures/ValidLayouts0% (0 lines)
Sources/SPMLLBuild0% (0 lines)
Sources/swift-build0% (0 lines)
Sources/swift-package-collection0% (0 lines)
Sources/swift-package-registry0% (0 lines)
Sources/swift-package0% (0 lines)
Sources/swift-run0% (0 lines)
Sources/swift-test0% (0 lines)
Sources/swiftpm-manifest-tool0% (0 lines)
Sources/swiftpm-xctest-helper0% (0 lines)
Sources/tsan_utils0% (0 lines)
Utilities/Docker0% (0 lines)
Utilities/Emacs0% (0 lines)
Utilities0% (0 lines)
cmake/modules0% (0 lines)

Duplication Between Components (50+ lines)

G Fixtures/DependencyResolution Fixtures/DependencyResolution Fixtures/Miscellaneous Fixtures/Miscellaneous Fixtures/DependencyResolution--Fixtures/Miscellaneous 134 Sources/PackagePlugin Sources/PackagePlugin Sources/SPMBuildCore Sources/SPMBuildCore Sources/PackagePlugin--Sources/SPMBuildCore 100 Sources/Basics Sources/Basics Sources/PackageCollections Sources/PackageCollections Sources/Basics--Sources/PackageCollections 82 Sources/PackageCollectionsModel Sources/PackageCollectionsModel Sources/PackageCollections--Sources/PackageCollectionsModel 54 Sources/PackageModel Sources/PackageModel Sources/SPMTestSupport Sources/SPMTestSupport Sources/PackageModel--Sources/SPMTestSupport 62 Sources/PackageDescription Sources/PackageDescription Sources/PackageLoading Sources/PackageLoading Sources/PackageDescription--Sources/PackageLoading 60

Download: SVG DOT (open online Graphviz editor)

Open 3D force graph...

Show more details on duplication between components...
Longest Duplicates
The list of 20 longest duplicates.
See data for all 375 duplicates...
Size#FoldersFilesLinesCode
38 x 2 Sources/PackageCollectionsSigning/Certificate
Sources/PackageCollectionsSigning/Certificate
CertificatePolicy.swift
CertificatePolicy.swift
682:747 (7%)
786:851 (7%)
view
32 x 2 Sources/PackageCollectionsSigningLibc/asn1
Sources/PackageCollectionsSigningLibc/asn1
a_d2i_fp.c
a_d2i_fp.c
243:280 (12%)
342:379 (12%)
view
30 x 2 Sources/PackageDescription
Sources/PackageLoading
ContextModel.swift
ContextModel.swift
13:61 (100%)
13:61 (100%)
view
22 x 2 Sources/PackagePlugin
Sources/SPMBuildCore
PluginInput.swift
PluginInvocation.swift
398:425 (7%)
703:730 (3%)
view
21 x 2 Sources/PackageDescription
Sources/PackageDescription
Target.swift
Target.swift
455:475 (3%)
566:586 (3%)
view
20 x 2 Sources/PackageDescription
Sources/PackageDescription
Target.swift
Target.swift
401:420 (3%)
511:530 (3%)
view
19 x 2 Sources/PackageModel/Manifest
Sources/PackageModel
TargetDescription.swift
Target.swift
273:297 (8%)
683:707 (3%)
view
19 x 2 Sources/Basics
Sources/PackageCollections/Storage
SQLiteBackedCache.swift
SQLitePackageCollectionsStorage.swift
125:148 (12%)
881:904 (2%)
view
19 x 2 Sources/Workspace
Sources/Workspace
WorkspaceState.swift
WorkspaceState.swift
278:299 (3%)
545:566 (3%)
view
19 x 2 Sources/PackageCollections/Model
Sources/PackageCollectionsModel
Collection.swift
PackageCollectionModel+v1.swift
212:247 (15%)
415:450 (7%)
view
18 x 2 Sources/Commands
Sources/Commands
Describe.swift
Describe.swift
384:401 (5%)
433:450 (5%)
view
18 x 2 Sources/SPMTestSupport
Sources/SPMTestSupport
ManifestExtensions.swift
ManifestExtensions.swift
55:72 (9%)
91:108 (9%)
view
17 x 2 Sources/PackageCollectionsSigning/Certificate
Sources/PackageCollectionsSigning/Certificate
CertificatePolicy.swift
CertificatePolicy.swift
622:644 (3%)
818:840 (3%)
view
17 x 2 Sources/SPMTestSupport
Sources/SPMTestSupport
ManifestExtensions.swift
ManifestExtensions.swift
92:108 (8%)
129:145 (8%)
view
17 x 2 Sources/SPMTestSupport
Sources/SPMTestSupport
ManifestExtensions.swift
ManifestExtensions.swift
56:72 (8%)
129:145 (8%)
view
17 x 2 Sources/PackageCollectionsSigning/Certificate
Sources/PackageCollectionsSigning/Certificate
CertificatePolicy.swift
CertificatePolicy.swift
622:644 (3%)
714:736 (3%)
view
16 x 2 Sources/Basics
Sources/PackageCollections/Storage
SQLiteBackedCache.swift
SQLitePackageCollectionsStorage.swift
154:172 (10%)
912:930 (2%)
view
16 x 2 Sources/SPMTestSupport
Sources/SPMTestSupport
ManifestExtensions.swift
ManifestExtensions.swift
21:36 (8%)
93:108 (8%)
view
16 x 2 Sources/SPMTestSupport
Sources/SPMTestSupport
ManifestExtensions.swift
ManifestExtensions.swift
21:36 (8%)
130:145 (8%)
view
16 x 2 Sources/SPMTestSupport
Sources/SPMTestSupport
ManifestExtensions.swift
ManifestExtensions.swift
21:36 (8%)
57:72 (8%)
view
Duplicated Units
The list of top 7 duplicated units.
See data for all 7 unit duplicates...
Size#FoldersFilesLinesCode
24 x 2 Fixtures/Miscellaneous/P...ourceGenBuildToolPlugin
Fixtures/Miscellaneous/P...gins/PluginScriptTarget
plugin.swift
Script.swift
6:30 
6:30 
view
19 x 2 Sources/PackageCollectionsSigning/Certificate
Sources/PackageCollectionsSigning/Certificate
CertificatePolicy.swift
CertificatePolicy.swift
706:727 
810:831 
view
15 x 2 Sources/Workspace
Sources/Workspace
WorkspaceState.swift
WorkspaceState.swift
286:301 
553:568 
view
14 x 2 Sources/Workspace
Sources/Workspace
WorkspaceState.swift
WorkspaceState.swift
326:340 
586:600 
view
9 x 3 Fixtures/Resources/Moved/Sources/SeaResource
Fixtures/Resources/Simple/Sources/CPPResource
Fixtures/Resources/Simple/Sources/SeaResource
main.m
main.mm
main.m
3:12 
3:12 
3:12 
view
7 x 2 Sources/SourceControl
Sources/Workspace
RepositoryManager.swift
WorkspaceState.swift
496:503 
126:133 
view
6 x 2 Sources/Commands
Sources/Commands
SwiftTool.swift
SwiftTool.swift
126:132 
134:140 
view