Skip to content

Commit 80d24ce

Browse files
authored
allow to define extra docs for named steps (#113)
1 parent d4b8ee9 commit 80d24ce

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

Diff for: codegen/src/main/scala/overflowdb/codegen/CodeGen.scala

+14-10
Original file line numberDiff line numberDiff line change
@@ -458,18 +458,21 @@ class CodeGen(schema: Schema) {
458458
val neighbor = adjacentNode.neighbor
459459
val entireNodeHierarchy: Set[AbstractNodeType] = neighbor.subtypes(schema.allNodeTypes.toSet) ++ (neighbor.extendzRecursively :+ neighbor)
460460
entireNodeHierarchy.map { neighbor =>
461-
val accessorName = {
462-
if (adjacentNode.customStepName.isEmpty)
463-
s"_${camelCase(neighbor.name)}Via${edge.className.capitalize}${camelCaseCaps(direction.toString)}"
464-
else adjacentNode.customStepName
465-
}
461+
val accessorName = adjacentNode.customStepName.getOrElse(
462+
s"_${camelCase(neighbor.name)}Via${edge.className.capitalize}${camelCaseCaps(direction.toString)}"
463+
)
466464
val cardinality = adjacentNode.cardinality
467465
val appendix = cardinality match {
468466
case EdgeType.Cardinality.One => ".next()"
469467
case EdgeType.Cardinality.ZeroOrOne => s".nextOption()"
470468
case _ => ""
471469
}
472-
s"def $accessorName: ${fullScalaType(neighbor, cardinality)} = $edgeAccessorName.collectAll[${neighbor.className}]$appendix"
470+
471+
s"""/** ${adjacentNode.customStepDoc.getOrElse("")}
472+
| * Traverse to ${neighbor.name} via ${adjacentNode.viaEdge.name}.
473+
| */
474+
|def $accessorName: ${fullScalaType(neighbor, cardinality)} =
475+
| $edgeAccessorName.collectAll[${neighbor.className}]$appendix""".stripMargin
473476
}
474477
}.distinct.mkString("\n\n")
475478

@@ -582,7 +585,7 @@ class CodeGen(schema: Schema) {
582585
def createNeighborInfos(neighborContexts: Seq[AjacentNodeWithInheritanceStatus], direction: Direction.Value): Seq[NeighborInfoForEdge] = {
583586
neighborContexts.groupBy(_.adjacentNode.viaEdge).map { case (edge, neighborContexts) =>
584587
val neighborInfoForNodes = neighborContexts.map { case AjacentNodeWithInheritanceStatus(adjacentNode, isInherited) =>
585-
NeighborInfoForNode(adjacentNode.neighbor, edge, direction, adjacentNode.cardinality, isInherited, Option(adjacentNode.customStepName).filter(_.nonEmpty))
588+
NeighborInfoForNode(adjacentNode.neighbor, edge, direction, adjacentNode.cardinality, isInherited, adjacentNode.customStepName, adjacentNode.customStepDoc)
586589
}
587590
NeighborInfoForEdge(edge, neighborInfoForNodes, nextOffsetPos)
588591
}.toSeq
@@ -1151,14 +1154,15 @@ class CodeGen(schema: Schema) {
11511154

11521155
def generateCustomStepNameTraversals(nodeType: AbstractNodeType): String = {
11531156
nodeType.edges
1154-
.filter(_.customStepName.nonEmpty)
11551157
.sortBy(_.customStepName)
1156-
.map { case AdjacentNode(viaEdge, neighbor, cardinality, customStepName) =>
1158+
.collect { case AdjacentNode(viaEdge, neighbor, cardinality, Some(customStepName), customStepDoc) =>
11571159
val mapOrFlatMap = cardinality match {
11581160
case Cardinality.One => "map"
11591161
case Cardinality.ZeroOrOne | Cardinality.List => "flatMap"
11601162
}
1161-
s"""/** traverse to ${neighbor.name} via ${viaEdge.name} - this relationship was given a customStepName in the schema */
1163+
s"""/** ${customStepDoc.getOrElse("")}
1164+
| * Traverse to ${neighbor.name} via ${viaEdge.name} - this relationship was given a customStepName in the schema.
1165+
| */
11621166
|def $customStepName: Traversal[${neighbor.className}] =
11631167
| traversal.$mapOrFlatMap(_.$customStepName)
11641168
|""".stripMargin

Diff for: codegen/src/main/scala/overflowdb/schema/Schema.scala

+16-9
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@ abstract class AbstractNodeType(val name: String, val comment: Option[String], v
7676
cardinalityOut: EdgeType.Cardinality = EdgeType.Cardinality.List,
7777
cardinalityIn: EdgeType.Cardinality = EdgeType.Cardinality.List,
7878
stepNameOut: String = "",
79-
stepNameIn: String = ""): this.type = {
80-
_outEdges.add(AdjacentNode(edge, inNode, cardinalityOut, stepNameOut))
81-
inNode._inEdges.add(AdjacentNode(edge, this, cardinalityIn, stepNameIn))
79+
stepNameOutDoc: String = "",
80+
stepNameIn: String = "",
81+
stepNameInDoc: String = ""): this.type = {
82+
_outEdges.add(AdjacentNode(edge, inNode, cardinalityOut, stringToOption(stepNameOut), stringToOption(stepNameOutDoc)))
83+
inNode._inEdges.add(AdjacentNode(edge, this, cardinalityIn, stringToOption(stepNameIn), stringToOption(stepNameInDoc)))
8284
this
8385
}
8486

@@ -87,9 +89,11 @@ abstract class AbstractNodeType(val name: String, val comment: Option[String], v
8789
cardinalityIn: EdgeType.Cardinality = EdgeType.Cardinality.List,
8890
cardinalityOut: EdgeType.Cardinality = EdgeType.Cardinality.List,
8991
stepNameIn: String = "",
90-
stepNameOut: String = ""): this.type = {
91-
_inEdges.add(AdjacentNode(edge, outNode, cardinalityIn, stepNameIn))
92-
outNode._outEdges.add(AdjacentNode(edge, this, cardinalityOut, stepNameOut))
92+
stepNameInDoc: String = "",
93+
stepNameOut: String = "",
94+
stepNameOutDoc: String = ""): this.type = {
95+
_inEdges.add(AdjacentNode(edge, outNode, cardinalityIn, stringToOption(stepNameIn), stringToOption(stepNameInDoc)))
96+
outNode._outEdges.add(AdjacentNode(edge, this, cardinalityOut, stringToOption(stepNameOut), stringToOption(stepNameOutDoc)))
9397
this
9498
}
9599

@@ -141,7 +145,9 @@ class NodeBaseType(name: String, comment: Option[String], schemaInfo: SchemaInfo
141145
override def toString = s"NodeBaseType($name)"
142146
}
143147

144-
case class AdjacentNode(viaEdge: EdgeType, neighbor: AbstractNodeType, cardinality: EdgeType.Cardinality, customStepName: String)
148+
case class AdjacentNode(viaEdge: EdgeType, neighbor: AbstractNodeType, cardinality: EdgeType.Cardinality,
149+
customStepName: Option[String] = None,
150+
customStepDoc: Option[String] = None)
145151

146152
case class ContainedNode(nodeType: AbstractNodeType, localName: String, cardinality: Property.Cardinality)
147153

@@ -253,13 +259,14 @@ case class NeighborInfoForNode(
253259
direction: Direction.Value,
254260
cardinality: EdgeType.Cardinality,
255261
isInherited: Boolean,
256-
customStepName: Option[String] = None) {
262+
customStepName: Option[String] = None,
263+
customStepDoc: Option[String] = None) {
257264

258265
/** handling some accidental complexity within the schema: if a relationship is defined on a base node and
259266
* separately on a concrete node, with different cardinalities, we need to use the highest cardinality */
260267
lazy val consolidatedCardinality: EdgeType.Cardinality = {
261268
val inheritedCardinalities = neighborNode.extendzRecursively.flatMap(_.inEdges).collect {
262-
case AdjacentNode(viaEdge, neighbor, cardinality, _)
269+
case AdjacentNode(viaEdge, neighbor, cardinality, _, _)
263270
if viaEdge == edge && neighbor == neighborNode => cardinality
264271
}
265272
val allCardinalities = cardinality +: inheritedCardinalities

Diff for: integration-tests/schemas/src/main/scala/TestSchema02.scala

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class TestSchema02 extends TestSchema {
4040
cardinalityOut = EdgeType.Cardinality.List,
4141
cardinalityIn = EdgeType.Cardinality.ZeroOrOne,
4242
stepNameOut = "customStepName1",
43+
stepNameOutDoc = "custom step name 1 documentation",
4344
stepNameIn = "customStepName1Inverse")
4445

4546
node2.addOutEdge(
@@ -48,5 +49,6 @@ class TestSchema02 extends TestSchema {
4849
cardinalityOut = EdgeType.Cardinality.One,
4950
cardinalityIn = EdgeType.Cardinality.One,
5051
stepNameOut = "customStepName2",
52+
stepNameOutDoc = "custom step name 2 documentation",
5153
stepNameIn = "customStepName2Inverse")
5254
}

0 commit comments

Comments
 (0)