@@ -12,11 +12,11 @@ def pathToString(p: Path) =
1212
1313trait SourceLink :
1414 val path : Option [Path ] = None
15- def render (memberName : String , path : Path , operation : String , line : Option [Int ]): String
15+ def render (memberName : String , path : Path , operation : String , line : Option [Int ], optionalRevision : Option [ String ] ): String
1616
1717case class TemplateSourceLink (val urlTemplate : String ) extends SourceLink :
1818 override val path : Option [Path ] = None
19- override def render (memberName : String , path : Path , operation : String , line : Option [Int ]): String =
19+ override def render (memberName : String , path : Path , operation : String , line : Option [Int ], optionalRevision : Option [ String ] ): String =
2020 val pathString = " /" + pathToString(path)
2121 val mapping = Map (
2222 " \\ {\\ { path \\ }\\ }" .r -> pathString,
@@ -36,10 +36,11 @@ case class TemplateSourceLink(val urlTemplate: String) extends SourceLink:
3636
3737case class WebBasedSourceLink (prefix : String , revision : String , subPath : String ) extends SourceLink :
3838 override val path : Option [Path ] = None
39- override def render (memberName : String , path : Path , operation : String , line : Option [Int ]): String =
39+ override def render (memberName : String , path : Path , operation : String , line : Option [Int ], optionalRevision : Option [ String ] = None ): String =
4040 val action = if operation == " view" then " blob" else operation
41+ val finalRevision = optionalRevision.getOrElse(revision)
4142 val linePart = line.fold(" " )(l => s " #L $l" )
42- s " $prefix/ $action/ $revision $subPath/ ${pathToString(path)}$linePart"
43+ s " $prefix/ $action/ $finalRevision $subPath/ ${pathToString(path)}$linePart"
4344
4445class SourceLinkParser (revision : Option [String ]) extends ArgParser [SourceLink ]:
4546 val KnownProvider = raw " (\w+):\/\/([^\/#]+)\/([^\/#]+)(\/[^\/#]+)?(#.+)? " .r
@@ -97,8 +98,8 @@ class SourceLinkParser(revision: Option[String]) extends ArgParser[SourceLink]:
9798type Operation = " view" | " edit"
9899
99100class SourceLinks (val sourceLinks : PathBased [SourceLink ]):
100- def pathTo (rawPath : Path , memberName : String = " " , line : Option [Int ] = None , operation : Operation = " view" ): Option [String ] =
101- sourceLinks.get(rawPath).map(res => res.elem.render(memberName, res.path, operation, line))
101+ def pathTo (rawPath : Path , memberName : String = " " , line : Option [Int ] = None , operation : Operation = " view" , optionalRevision : Option [ String ] = None ): Option [String ] =
102+ sourceLinks.get(rawPath).map(res => res.elem.render(memberName, res.path, operation, line, optionalRevision ))
102103
103104 def pathTo (member : Member ): Option [String ] =
104105 member.sources.flatMap(s => pathTo(s.path, member.name, Option (s.lineNumber).map(_ + 1 )))
0 commit comments