@@ -12,11 +12,11 @@ def pathToString(p: Path) =
12
12
13
13
trait SourceLink :
14
14
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
16
16
17
17
case class TemplateSourceLink (val urlTemplate : String ) extends SourceLink :
18
18
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 =
20
20
val pathString = " /" + pathToString(path)
21
21
val mapping = Map (
22
22
" \\ {\\ { path \\ }\\ }" .r -> pathString,
@@ -36,10 +36,11 @@ case class TemplateSourceLink(val urlTemplate: String) extends SourceLink:
36
36
37
37
case class WebBasedSourceLink (prefix : String , revision : String , subPath : String ) extends SourceLink :
38
38
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 =
40
40
val action = if operation == " view" then " blob" else operation
41
+ val finalRevision = optionalRevision.getOrElse(revision)
41
42
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"
43
44
44
45
class SourceLinkParser (revision : Option [String ]) extends ArgParser [SourceLink ]:
45
46
val KnownProvider = raw " (\w+):\/\/([^\/#]+)\/([^\/#]+)(\/[^\/#]+)?(#.+)? " .r
@@ -97,8 +98,8 @@ class SourceLinkParser(revision: Option[String]) extends ArgParser[SourceLink]:
97
98
type Operation = " view" | " edit"
98
99
99
100
class 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 ))
102
103
103
104
def pathTo (member : Member ): Option [String ] =
104
105
member.sources.flatMap(s => pathTo(s.path, member.name, Option (s.lineNumber).map(_ + 1 )))
0 commit comments