diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 1dde7bd80d451..e144138008da7 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -716,11 +716,12 @@ impl<'self> fmt::Default for Item<'self> {
}
write!(fmt.buf,
"[src]",
+ href='{root}src/{crate}/{path}.html\\#{linefrom}-{lineto}'>[src]",
root = it.cx.root_path,
crate = it.cx.layout.crate,
path = path.connect("/"),
- line = it.item.source.loline);
+ linefrom = it.item.source.loline,
+ lineto = it.item.source.hiline);
}
// Write the breadcrumb trail header for the top
diff --git a/src/librustdoc/html/static/main.css b/src/librustdoc/html/static/main.css
index 2366a530a877c..f24110a62eb1b 100644
--- a/src/librustdoc/html/static/main.css
+++ b/src/librustdoc/html/static/main.css
@@ -118,9 +118,16 @@ body {
.content h1 { margin-top: 0; }
.content h1, .content h2 { margin-left: -20px; }
.content pre { padding: 20px; }
-
+.content.source pre.rust {
+ white-space: pre;
+ overflow: auto;
+ padding-left: 0;
+}
.content pre.line-numbers { float: left; border: none; }
.line-numbers span { color: #c67e2d; }
+.line-numbers .line-highlighted {
+ background-color: #fff871;
+}
.content .highlighted {
cursor: pointer;
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index bf40261e76509..faa22672736ce 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -31,6 +31,25 @@
resizeShortBlocks();
$(window).on('resize', resizeShortBlocks);
+ function highlightSourceLines() {
+ var i, from, to, match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);
+ if (match) {
+ from = parseInt(match[1], 10);
+ to = Math.min(50000, parseInt(match[2] || match[1], 10));
+ from = Math.min(from, to);
+ if ($('#' + from).length === 0) {
+ return;
+ }
+ $('#' + from)[0].scrollIntoView();
+ $('.line-numbers span').removeClass('line-highlighted');
+ for (i = from; i <= to; i += 1) {
+ $('#' + i).addClass('line-highlighted');
+ }
+ }
+ }
+ highlightSourceLines();
+ $(window).on('hashchange', highlightSourceLines);
+
$(document).on('keyup', function (e) {
if (document.activeElement.tagName === 'INPUT') {
return;