Skip to content

Commit 401a45d

Browse files
committed
add documentation coverage charts to package and module pages
1 parent 096bf25 commit 401a45d

35 files changed

+878
-486
lines changed

Assets/css/Main.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/css/Main.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/Unidoc/Unidoc.Zone.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ extension Unidoc.Zone
3838
}
3939
extension Unidoc.Zone
4040
{
41+
/// A shorthand for `self + culture * .module`.
42+
@inlinable public static
43+
func + (self:Self, culture:Int) -> Unidoc.Scalar
44+
{
45+
self + culture * .module
46+
}
47+
4148
@inlinable public static
4249
func + (self:Self, citizen:Int32) -> Unidoc.Scalar
4350
{

Sources/UnidocLinker/Conformances/ProtocolConformances.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ extension ProtocolConformances:ExpressibleByDictionaryLiteral
4545
self.init(table: [:])
4646
}
4747
}
48-
extension ProtocolConformances<Unidoc.Scalar>
48+
extension ProtocolConformances<Int>
4949
{
5050
init(context:DynamicContext,
5151
errors:inout [any DynamicLinkerError],
5252
with populate:(inout ProtocolConformances<Int>) throws -> Void) rethrows
5353
{
5454
var conformances:ProtocolConformances<Int> = [:]
5555
try populate(&conformances)
56-
let deduplicated:[Unidoc.Scalar: [ProtocolConformance<Culture>]] =
56+
let deduplicated:[Unidoc.Scalar: [ProtocolConformance<Int>]] =
5757
conformances.table.mapValues
5858
{
5959
/// The set of local package cultures in which this protocol conformance
@@ -68,7 +68,7 @@ extension ProtocolConformances<Unidoc.Scalar>
6868
let segregated:[Int: [[GenericConstraint<Unidoc.Scalar?>]]] = $0.reduce(
6969
into: [:])
7070
{
71-
let module:ModuleDetails = context.current.graph.cultures[$1.culture].module
71+
let module:ModuleDetails = context.current.cultures[$1.culture].module
7272
for c:Int in module.dependencies.modules where
7373
c != $1.culture && extancy.contains(c)
7474
{
@@ -128,7 +128,7 @@ extension ProtocolConformances<Unidoc.Scalar>
128128
case .where(let parameter, is: let what, to: let type):
129129
if case .nominal(let type?) = type,
130130
let snapshot:SnapshotObject = context[type.package],
131-
let local:[Int32] = snapshot.nodes[type]?.decl?.superforms
131+
let local:[Int32] = snapshot.decls[type.citizen]?.decl?.superforms
132132
{
133133
for local:Int32 in local
134134
{
@@ -178,7 +178,7 @@ extension ProtocolConformances<Unidoc.Scalar>
178178
// Conformances should now be unique per culture.
179179
return reduced.map
180180
{
181-
.init(conditions: $0.value, culture: context.current.zone + $0.key * .module)
181+
.init(conditions: $0.value, culture: $0.key)
182182
}
183183
.sorted
184184
{

Sources/UnidocLinker/Groups/DynamicClientGroup.swift

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,10 @@ extension DynamicClientGroup
7272
filter:Set<Int>?)
7373
{
7474
for (c, culture):(Int, SymbolGraph.Culture) in zip(
75-
snapshot.graph.cultures.indices,
76-
snapshot.graph.cultures) where
77-
filter?.contains(c) ?? true
75+
snapshot.cultures.indices,
76+
snapshot.cultures) where filter?.contains(c) ?? true
7877
{
79-
let module:ModuleIdentifier = snapshot.graph.namespaces[c]
78+
let module:ModuleIdentifier = snapshot.namespaces[c]
8079

8180
self.imports.append(module)
8281

@@ -103,11 +102,11 @@ extension DynamicClientGroup
103102
context:DynamicContext,
104103
filter:Set<Int>?)
105104
{
106-
let qualifier:ModuleIdentifier = snapshot.graph.namespaces[namespace.index]
105+
let qualifier:ModuleIdentifier = snapshot.namespaces[namespace.index]
107106
for s:Int32 in namespace.range
108107
{
109-
let node:SymbolGraph.DeclNode = snapshot.graph.decls.nodes[s]
110-
let symbol:Symbol.Decl = snapshot.graph.decls.symbols[s]
108+
let node:SymbolGraph.DeclNode = snapshot.decls.nodes[s]
109+
let symbol:Symbol.Decl = snapshot.decls.symbols[s]
111110

112111
guard let s:Unidoc.Scalar = snapshot.scalars.decls[s]
113112
else
@@ -128,7 +127,7 @@ extension DynamicClientGroup
128127
}
129128
// Extension may extend a scalar from a different package.
130129
if let outer:SymbolGraph.Decl = node.decl ??
131-
context[s.package]?.nodes[s]?.decl
130+
context[s.package]?.decls[s.citizen]?.decl
132131
{
133132
self.add(extensions: node.extensions,
134133
extending: (s, symbol, outer.path),
@@ -177,14 +176,14 @@ extension DynamicClientGroup
177176
}
178177

179178
// This can be completely different from the namespace of the extended type!
180-
let qualifier:ModuleIdentifier = snapshot.graph.namespaces[`extension`.namespace]
179+
let qualifier:ModuleIdentifier = snapshot.namespaces[`extension`.namespace]
181180
for f:Int32 in `extension`.features
182181
{
183-
let symbol:Symbol.Decl.Vector = .init(snapshot.graph.decls.symbols[f],
182+
let symbol:Symbol.Decl.Vector = .init(snapshot.decls.symbols[f],
184183
self: outer.symbol)
185184

186185
if let f:Unidoc.Scalar = snapshot.scalars.decls[f],
187-
let inner:SymbolGraph.Decl = context[f.package]?.nodes[f]?.decl
186+
let inner:SymbolGraph.Decl = context[f.package]?.decls[f.citizen]?.decl
188187
{
189188
self.codelinks[qualifier, outer.path, inner.path.last]
190189
.overload(with: .init(

Sources/UnidocLinker/Groups/DynamicContext.SortLeague.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Sources
12
import Unidoc
23

34
extension DynamicContext
@@ -9,7 +10,10 @@ extension DynamicContext
910

1011
case `associatedtype`
1112

12-
case `case`
13+
/// Enumeration cases sort by their declaration order. Because it is impossible for
14+
/// them to appear in a different file than the enum’s declaration, we can simply use
15+
/// the source position of the case declaration.
16+
case `case`(SourcePosition)
1317
case initializer
1418
case deinitializer
1519

@@ -25,14 +29,14 @@ extension DynamicContext
2529
}
2630
extension DynamicContext.SortLeague
2731
{
28-
init(_ phylum:Unidoc.Decl)
32+
init(_ phylum:Unidoc.Decl, position:SourcePosition? = nil)
2933
{
3034
switch phylum
3135
{
3236
case .var(nil): self = .var
3337
case .func(nil): self = .func
3438
case .associatedtype: self = .associatedtype
35-
case .case: self = .case
39+
case .case: self = .case(position ?? .zero)
3640
case .initializer: self = .initializer
3741
case .deinitializer: self = .deinitializer
3842
case .protocol: self = .protocol

Sources/UnidocLinker/Groups/DynamicContext.swift

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ModuleGraphs
33
import SymbolGraphs
44
import Symbols
55
import Unidoc
6+
import UnidocRecords
67

78
@frozen public
89
struct DynamicContext
@@ -124,6 +125,26 @@ extension DynamicContext
124125
}
125126
extension DynamicContext
126127
{
128+
func dependencies() -> [Record.Master.Meta.Dependency]
129+
{
130+
var dependencies:[Record.Master.Meta.Dependency] = []
131+
dependencies.reserveCapacity(self.current.metadata.dependencies.count + 1)
132+
133+
if case _? = self.current.metadata.toolchain,
134+
let resolution:Unidoc.Zone = self[.swift]?.zone
135+
{
136+
dependencies.append(.init(id: .swift, requirement: nil, resolution: resolution))
137+
}
138+
for dependency:SymbolGraphMetadata.Dependency in self.current.metadata.dependencies
139+
{
140+
dependencies.append(.init(id: dependency.package,
141+
requirement: dependency.requirement,
142+
resolution: self[dependency.package]?.zone))
143+
}
144+
145+
return dependencies
146+
}
147+
127148
/// Builds a codelink resolution table
128149
func groups() -> [DynamicClientGroup]
129150
{
@@ -132,8 +153,8 @@ extension DynamicContext
132153
// resolution tables.
133154
var groups:[[PackageIdentifier: Set<String>]: [Int]] = [:]
134155
for (c, culture):(Int, SymbolGraph.Culture) in zip(
135-
self.current.graph.cultures.indices,
136-
self.current.graph.cultures)
156+
self.current.cultures.indices,
157+
self.current.cultures)
137158
{
138159
print("\(culture.module.id): \(culture.module.dependencies)")
139160

@@ -147,12 +168,12 @@ extension DynamicContext
147168
groups[products, default: []].append(c)
148169
}
149170

150-
return .init(unsafeUninitializedCapacity: self.current.graph.cultures.count)
171+
return .init(unsafeUninitializedCapacity: self.current.cultures.count)
151172
{
152173
for (dependencies, cultures):([PackageIdentifier: Set<String>], [Int]) in groups
153174
{
154175
var group:DynamicClientGroup = .init(
155-
nodes: self.current.scalars.decls[self.current.graph.decls.nodes.indices])
176+
nodes: self.current.scalars.decls[self.current.decls.nodes.indices])
156177

157178
if let swift:SnapshotObject = self[dynamic: .swift]
158179
{

Sources/UnidocLinker/Groups/DynamicSymbolicator.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ extension DynamicSymbolicator:Symbolicator
2828
public
2929
func loadDeclSymbol(_ scalar:Unidoc.Scalar) -> Symbol.Decl?
3030
{
31-
self.context[scalar.package]?.decls[scalar]
31+
self.context[scalar.package]?.decls.symbols[scalar.citizen]
3232
}
3333
public
3434
func loadFileSymbol(_ scalar:Unidoc.Scalar) -> Symbol.File?
3535
{
36-
self.context[scalar.package]?.files[scalar]
36+
self.context[scalar.package]?.files[scalar.citizen]
3737
}
3838
}
3939
extension DynamicSymbolicator

Sources/UnidocLinker/Linker/DynamicLinker.ExtensionSignature.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ extension DynamicLinker
66
struct ExtensionSignature:Equatable, Hashable, Sendable
77
{
88
let conditions:[GenericConstraint<Unidoc.Scalar?>]
9-
let culture:Unidoc.Scalar
9+
let culture:Int
1010
let extends:Unidoc.Scalar
1111

1212
init(conditions:[GenericConstraint<Unidoc.Scalar?>],
13-
culture:Unidoc.Scalar,
13+
culture:Int,
1414
extends:Unidoc.Scalar)
1515
{
1616
self.conditions = conditions

Sources/UnidocLinker/Linker/DynamicLinker.Extensions.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ extension DynamicLinker.Extensions
8787
extending s:Int32,
8888
context:DynamicContext,
8989
clients:[DynamicClientGroup],
90-
diagnostics:DynamicLinkerDiagnostics) -> ProtocolConformances<Unidoc.Scalar>
90+
diagnostics:DynamicLinkerDiagnostics) -> ProtocolConformances<Int>
9191
{
9292
guard let s:Unidoc.Scalar = context.current.scalars.decls[s],
93-
let scope:SymbolGraph.Decl = context[s.package]?.nodes[s]?.decl
93+
let scope:SymbolGraph.Decl = context[s.package]?.decls[s.citizen]?.decl
9494
else
9595
{
96-
let type:Symbol.Decl = context.current.graph.decls.symbols[s]
96+
let type:Symbol.Decl = context.current.decls.symbols[s]
9797

9898
diagnostics.errors.append(DroppedExtensionsError.extensions(of: type,
9999
count: extensions.count))
@@ -106,11 +106,11 @@ extension DynamicLinker.Extensions
106106
{
107107
.init(
108108
conditions: $0.conditions.map { $0.map { context.current.scalars.decls[$0] } },
109-
culture: context.current.zone + $0.culture * .module,
109+
culture: $0.culture,
110110
extends: s)
111111
}
112112

113-
let conformances:ProtocolConformances<Unidoc.Scalar> = .init(
113+
let conformances:ProtocolConformances<Int> = .init(
114114
context: context,
115115
errors: &diagnostics.errors)
116116
{
@@ -137,10 +137,10 @@ extension DynamicLinker.Extensions
137137
}
138138
}
139139

140-
for (p, conformances):(Unidoc.Scalar, [ProtocolConformance<Unidoc.Scalar>]) in
140+
for (p, conformances):(Unidoc.Scalar, [ProtocolConformance<Int>]) in
141141
conformances
142142
{
143-
for conformance:ProtocolConformance in conformances
143+
for conformance:ProtocolConformance<Int> in conformances
144144
{
145145
let signature:DynamicLinker.ExtensionSignature = .init(
146146
conditions: conformance.conditions,
@@ -206,7 +206,7 @@ extension DynamicLinker.Extensions
206206

207207
let resolver:DynamicResolver = .init(context: context,
208208
diagnostics: diagnostics,
209-
namespace: context.current.graph.namespaces[`extension`.namespace],
209+
namespace: context.current.namespaces[`extension`.namespace],
210210
clients: clients[`extension`.culture],
211211
scope: [String].init(scope.path))
212212

0 commit comments

Comments
 (0)