Skip to content

Commit b34cdb6

Browse files
committed
sort the conforming types groups
1 parent 3cfb916 commit b34cdb6

17 files changed

+117
-53
lines changed

Sources/Unidoc/Unidoc.Scalar.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ extension Unidoc
1919
}
2020
}
2121
}
22+
extension Unidoc.Scalar:Identifiable
23+
{
24+
@inlinable public
25+
var id:Self { self }
26+
}
2227
extension Unidoc.Scalar
2328
{
2429
@available(*, deprecated, renamed: "edition")

Sources/UnidocDB/Mongo.CollectionModel.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,9 @@ extension Mongo.CollectionModel
499499
return deletions.deleted
500500
}
501501
}
502-
extension Mongo.CollectionModel<Unidoc.Scalar>
502+
// TODO: we need to unify ``Unidoc.Scalar`` and ``Unidoc.Group`, most likely by introducing
503+
// a new type ``Unidoc.Vertex``.
504+
extension Mongo.CollectionModel // where Element.ID == Unidoc.Scalar
503505
{
504506
/// Deletes all records from the collection within the specified zone.
505507
func clear(range:Unidoc.Edition, with session:Mongo.Session) async throws
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import LexicalPaths
2+
import SymbolGraphs
3+
4+
extension Unidoc
5+
{
6+
/// A sort priority that compares the fully-qualified names of declarations.
7+
enum LexicalPriority:Equatable, Comparable
8+
{
9+
case available (UnqualifiedPath, Int32)
10+
case removed (UnqualifiedPath, Int32)
11+
}
12+
}
13+
extension Unidoc.LexicalPriority:Unidoc.SortPriority
14+
{
15+
static
16+
func of(decl:SymbolGraph.Decl, at index:Int32) -> Self?
17+
{
18+
decl.signature.availability.isGenerallyRecommended
19+
? .available(decl.path, index)
20+
: .removed(decl.path, index)
21+
}
22+
}

Sources/UnidocLinker/Curation/Unidoc.Linker.SortPriority.swift

Lines changed: 0 additions & 8 deletions
This file was deleted.

Sources/UnidocLinker/Curation/Unidoc.Linker.SortPriority.Constructor.swift renamed to Sources/UnidocLinker/Curation/Unidoc.SemanticPriority.Constructor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Sources
22

3-
extension Unidoc.Linker.SortPriority
3+
extension Unidoc.SemanticPriority
44
{
55
enum Constructor:Equatable, Comparable
66
{

Sources/UnidocLinker/Curation/Unidoc.Linker.SortPriority.Member.swift renamed to Sources/UnidocLinker/Curation/Unidoc.SemanticPriority.Member.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
extension Unidoc.Linker.SortPriority
1+
extension Unidoc.SemanticPriority
22
{
33
enum Member:Equatable, Comparable
44
{

Sources/UnidocLinker/Curation/Unidoc.Linker.SortPriority.Phylum.swift renamed to Sources/UnidocLinker/Curation/Unidoc.SemanticPriority.Phylum.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import Sources
33
import Symbols
44

5-
extension Unidoc.Linker.SortPriority
5+
extension Unidoc.SemanticPriority
66
{
77
enum Phylum:Equatable, Comparable
88
{
@@ -26,7 +26,7 @@ extension Unidoc.Linker.SortPriority
2626
case macro
2727
}
2828
}
29-
extension Unidoc.Linker.SortPriority.Phylum
29+
extension Unidoc.SemanticPriority.Phylum
3030
{
3131
init(_ phylum:Phylum.Decl, position:SourcePosition? = nil)
3232
{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import SymbolGraphs
2+
3+
extension Unidoc
4+
{
5+
enum SemanticPriority:Equatable, Comparable
6+
{
7+
case available (Phylum, String, Int32)
8+
case removed (Phylum, String, Int32)
9+
}
10+
}
11+
extension Unidoc.SemanticPriority:Unidoc.SortPriority
12+
{
13+
static
14+
func of(decl:SymbolGraph.Decl, at index:Int32) -> Self?
15+
{
16+
let phylum:Phylum = .init(decl.phylum, position: decl.location?.position)
17+
18+
return decl.signature.availability.isGenerallyRecommended
19+
? .available(phylum, decl.path.last, index)
20+
: .removed(phylum, decl.path.last, index)
21+
}
22+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import SymbolGraphs
2+
import Unidoc
3+
4+
extension Unidoc
5+
{
6+
typealias SortPriority = _UnidocSortPriority
7+
}
8+
/// The name of this protocol is ``Unidoc.SortPriority``.
9+
protocol _UnidocSortPriority:Comparable
10+
{
11+
/// Get the sort-priority of a declaration.
12+
static
13+
func of(decl:SymbolGraph.Decl, at index:Int32) -> Self?
14+
}
15+
extension Unidoc.SortPriority
16+
{
17+
static
18+
func of(decl:Unidoc.Scalar, in linker:borrowing Unidoc.Linker) -> Self?
19+
{
20+
guard
21+
let graph:Unidoc.Linker.Graph = linker[decl.package]
22+
else
23+
{
24+
return nil
25+
}
26+
27+
return .of(decl: decl, in: graph)
28+
}
29+
30+
static
31+
func of(decl:Unidoc.Scalar, in graph:Unidoc.Linker.Graph) -> Self?
32+
{
33+
guard
34+
let local:Int32 = decl - graph.id,
35+
let decl:SymbolGraph.Decl = graph.decls[local]?.decl
36+
else
37+
{
38+
return nil
39+
}
40+
41+
return .of(decl: decl, at: local)
42+
}
43+
}

Sources/UnidocLinker/Sema/Unidoc.Conformers.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ extension Unidoc.Conformers:Unidoc.LinkerIndexable
5050
.init(id: self.id.in(linker.current.id),
5151
culture: linker.current.id + signature.culture,
5252
scope: signature.conformance,
53-
unconditional: self.unconditional,
54-
conditional: self.conditional)
55-
// do we need to sort this?
53+
unconditional: linker.sort(self.unconditional, by: Unidoc.LexicalPriority.self),
54+
conditional: linker.sort(self.conditional, by: Unidoc.LexicalPriority.self))
5655
}
5756
}

0 commit comments

Comments
 (0)