Skip to content

Commit 2059bd4

Browse files
committed
display SPI pie charts, add background to code snippet styling
1 parent ca68c5b commit 2059bd4

File tree

11 files changed

+179
-36
lines changed

11 files changed

+179
-36
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.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import BSON
2+
import UnidocProfiling
3+
4+
extension Unidoc.Stats.SPIs
5+
{
6+
enum SectorKey
7+
{
8+
case none
9+
case unknown
10+
case nominal(String)
11+
}
12+
}
13+
extension Unidoc.Stats.SPIs.SectorKey
14+
{
15+
init(key:BSON.Key)
16+
{
17+
switch key
18+
{
19+
case "": self = .none
20+
case "__unknown__": self = .unknown
21+
case let key: self = .nominal(key.rawValue)
22+
}
23+
}
24+
}
25+
extension Unidoc.Stats.SPIs.SectorKey:PieSectorKey
26+
{
27+
var id:String
28+
{
29+
switch self
30+
{
31+
case .none: "none"
32+
case .unknown: "unknown"
33+
case .nominal(let name): "spi-\(name)"
34+
}
35+
}
36+
37+
var name:String
38+
{
39+
switch self
40+
{
41+
case .none: "not gated"
42+
case .unknown: "SPI (unknown)"
43+
case let .nominal(name): "SPI (\(name))"
44+
}
45+
}
46+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import BSON
2+
import OrderedCollections
3+
import UnidocProfiling
4+
5+
extension Unidoc.Stats
6+
{
7+
struct SPIs:PieValues
8+
{
9+
let sectors:[(key:SectorKey, value:Int)]
10+
11+
private
12+
init(sectors:[(key:SectorKey, value:Int)])
13+
{
14+
self.sectors = sectors
15+
}
16+
}
17+
}
18+
extension Unidoc.Stats.SPIs
19+
{
20+
init(interfaces:OrderedDictionary<BSON.Key, Int>)
21+
{
22+
var sectors:[(key:SectorKey, value:Int)]
23+
24+
sectors = interfaces.map
25+
{
26+
(.init(key: $0.key), $0.value)
27+
}
28+
sectors.sort
29+
{
30+
$0.key.id < $1.key.id
31+
}
32+
33+
self.init(sectors: sectors)
34+
}
35+
}

Sources/SwiftinitPages/Surfaces/Vertices/Swiftinit.Stats.ModulePage.swift

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,37 +102,40 @@ extension Swiftinit.Stats.ModulePage:Swiftinit.VertexPage
102102
}
103103
content:
104104
{
105-
$0[.h2] = Swiftinit.StatsHeading.interfaceBreakdown
105+
$0[.h2] = Swiftinit.StatsHeading.documentationCoverage
106106

107107
$0[.h3] = "Declarations"
108108
$0[.figure]
109109
{
110-
$0.class = "chart decl"
111-
} = self.vertex.census.unweighted.decls.chart
110+
$0.class = "chart coverage"
111+
} = self.vertex.census.unweighted.coverage.chart
112112
{
113113
"""
114114
\($1) percent of the declarations in \(self.name) are \($0.name)
115115
"""
116116
}
117-
117+
// Right now we do not have coverage weights, so displaying the same pie chart
118+
// twice would be redundant.
119+
/*
118120
$0[.h3] = "Symbols"
119121
$0[.figure]
120122
{
121-
$0.class = "chart decl"
122-
} = self.vertex.census.weighted.decls.chart
123+
$0.class = "chart coverage"
124+
} = self.vertex.census.weighted.coverage.chart
123125
{
124126
"""
125127
\($1) percent of the symbols in \(self.name) are \($0.name)
126128
"""
127129
}
130+
*/
128131

129-
$0[.h2] = Swiftinit.StatsHeading.documentationCoverage
132+
$0[.h2] = Swiftinit.StatsHeading.interfaceBreakdown
130133

131134
$0[.h3] = "Declarations"
132135
$0[.figure]
133136
{
134-
$0.class = "chart coverage"
135-
} = self.vertex.census.unweighted.coverage.chart
137+
$0.class = "chart decl"
138+
} = self.vertex.census.unweighted.decls.chart
136139
{
137140
"""
138141
\($1) percent of the declarations in \(self.name) are \($0.name)
@@ -142,13 +145,27 @@ extension Swiftinit.Stats.ModulePage:Swiftinit.VertexPage
142145
$0[.h3] = "Symbols"
143146
$0[.figure]
144147
{
145-
$0.class = "chart coverage"
146-
} = self.vertex.census.weighted.coverage.chart
148+
$0.class = "chart decl"
149+
} = self.vertex.census.weighted.decls.chart
147150
{
148151
"""
149152
\($1) percent of the symbols in \(self.name) are \($0.name)
150153
"""
151154
}
155+
156+
let interfaces:Unidoc.Stats.SPIs = .init(interfaces: self.vertex.census.interfaces)
157+
$0[.h2] = Swiftinit.StatsHeading.interfaceLayers
158+
159+
$0[.h3] = "Declarations"
160+
$0[.figure]
161+
{
162+
$0.class = "chart spis"
163+
} = interfaces.chart
164+
{
165+
"""
166+
\($1) percent of the declarations in \(self.name) are \($0.name)
167+
"""
168+
}
152169
}
153170
}
154171
}

Sources/SwiftinitPages/Surfaces/Vertices/Swiftinit.Stats.PackagePage.swift

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ extension Swiftinit.Stats.PackagePage:Swiftinit.VertexPage
8484
}
8585
content:
8686
{
87+
$0[.h2] = Swiftinit.StatsHeading.documentationCoverage
88+
89+
$0[.h3] = "Declarations"
90+
$0[.figure]
91+
{
92+
$0.class = "chart coverage"
93+
} = self.vertex.snapshot.census.unweighted.coverage.chart
94+
{
95+
"""
96+
\($1) percent of the declarations in \(self.volume.title) are \($0.name)
97+
"""
98+
}
99+
87100
$0[.h2] = Swiftinit.StatsHeading.interfaceBreakdown
88101

89102
$0[.h3] = "Declarations"
@@ -108,29 +121,20 @@ extension Swiftinit.Stats.PackagePage:Swiftinit.VertexPage
108121
"""
109122
}
110123

111-
$0[.h2] = Swiftinit.StatsHeading.documentationCoverage
124+
let interfaces:Unidoc.Stats.SPIs = .init(
125+
interfaces: self.vertex.snapshot.census.interfaces)
112126

127+
$0[.h2] = Swiftinit.StatsHeading.interfaceLayers
113128
$0[.h3] = "Declarations"
114129
$0[.figure]
115130
{
116-
$0.class = "chart coverage"
117-
} = self.vertex.snapshot.census.unweighted.coverage.chart
131+
$0.class = "chart spis"
132+
} = interfaces.chart
118133
{
119134
"""
120135
\($1) percent of the declarations in \(self.volume.title) are \($0.name)
121136
"""
122137
}
123-
124-
$0[.h3] = "Symbols"
125-
$0[.figure]
126-
{
127-
$0.class = "chart coverage"
128-
} = self.vertex.snapshot.census.weighted.coverage.chart
129-
{
130-
"""
131-
\($1) percent of the symbols in \(self.volume.title) are \($0.name)
132-
"""
133-
}
134138
}
135139
}
136140
}

Sources/SwiftinitPages/Surfaces/Vertices/Swiftinit.StatsHeading.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ extension Swiftinit
44
{
55
enum StatsHeading
66
{
7+
case interfaceLayers
78
case interfaceBreakdown
89
case documentationCoverage
910
}
@@ -14,6 +15,7 @@ extension Swiftinit.StatsHeading:Identifiable
1415
{
1516
switch self
1617
{
18+
case .interfaceLayers: "ss:interface-layers"
1719
case .interfaceBreakdown: "ss:interface-breakdown"
1820
case .documentationCoverage: "ss:documentation-coverage"
1921
}
@@ -25,6 +27,7 @@ extension Swiftinit.StatsHeading:HTML.OutputStreamableHeading
2527
{
2628
switch self
2729
{
30+
case .interfaceLayers: "Interface layers"
2831
case .interfaceBreakdown: "Interface breakdown"
2932
case .documentationCoverage: "Documentation coverage"
3033
}

Sources/SwiftinitPages/Surfaces/Vertices/Swiftinit.StatsThumbnail.swift

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ extension Swiftinit.StatsThumbnail:HTML.OutputStreamable
3232

3333
div[.div, { $0.class = "charts" }]
3434
{
35+
$0[.div]
36+
{
37+
$0[.p]
38+
{
39+
let target:Swiftinit.StatsHeading = .documentationCoverage
40+
$0[.a] { $0.href = "\(url)#\(target.id)" } = "Coverage"
41+
}
42+
43+
$0[.figure]
44+
{
45+
$0.class = "chart coverage"
46+
} = self.census.unweighted.coverage.pie
47+
{
48+
"""
49+
\($1) percent of the declarations in \(self.domain) are \($0.name)
50+
"""
51+
}
52+
}
53+
3554
$0[.div]
3655
{
3756
$0[.p]
@@ -53,16 +72,17 @@ extension Swiftinit.StatsThumbnail:HTML.OutputStreamable
5372

5473
$0[.div]
5574
{
75+
let interfaces:Unidoc.Stats.SPIs = .init(interfaces: self.census.interfaces)
5676
$0[.p]
5777
{
58-
let target:Swiftinit.StatsHeading = .documentationCoverage
59-
$0[.a] { $0.href = "\(url)#\(target.id)" } = "Coverage"
78+
let target:Swiftinit.StatsHeading = .interfaceLayers
79+
$0[.a] { $0.href = "\(url)#\(target.id)" } = "Interfaces"
6080
}
6181

6282
$0[.figure]
6383
{
64-
$0.class = "chart coverage"
65-
} = self.census.unweighted.coverage.pie
84+
$0.class = "chart spis"
85+
} = interfaces.pie
6686
{
6787
"""
6888
\($1) percent of the declarations in \(self.domain) are \($0.name)

Sources/SwiftinitRender/Formats/Swiftinit.RenderFormat.Assets.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ extension Swiftinit.RenderFormat.Assets
2222
/// To reduce cache churn, not all assets are versioned. For example, the fonts and
2323
/// the favicon do not use the version numbers.
2424
@inlinable public static
25-
var version:MajorVersion { .v(17) }
25+
var version:MajorVersion { .v(18) }
2626
}
2727
extension Swiftinit.RenderFormat.Assets
2828
{

Stylesheets/_figure.scss

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ figure
99
}
1010
}
1111

12-
figure.decl div.pie-color > svg g
12+
figure.chart.decl svg > g
1313
{
1414
> *
1515
{
@@ -76,7 +76,22 @@ figure.decl div.pie-color > svg g
7676
fill: rgb(255, 154, 38);
7777
}
7878
}
79-
figure.coverage div.pie-color > svg g
79+
figure.chart.spis svg > g
80+
{
81+
> *.none
82+
{
83+
fill: rgb(238, 238, 238);
84+
}
85+
> *.unknown
86+
{
87+
fill: rgb(255, 210, 85);
88+
}
89+
> *.nominal
90+
{
91+
fill: rgb(103, 131, 255);
92+
}
93+
}
94+
figure.chart.coverage svg > g
8095
{
8196
> *.undocumented
8297
{

0 commit comments

Comments
 (0)