diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs index 5df4862290e3c..bd4cfe51ea72f 100644 --- a/src/librustdoc/html/highlight.rs +++ b/src/librustdoc/html/highlight.rs @@ -28,9 +28,12 @@ use syntax::parse; use syntax_pos::{Span, FileName}; /// Highlights `src`, returning the HTML output. -pub fn render_with_highlighting(src: &str, class: Option<&str>, - extension: Option<&str>, - tooltip: Option<(&str, &str)>) -> String { +pub fn render_with_highlighting( + src: &str, + class: Option<&str>, + extension: Option<&str>, + tooltip: Option<(&str, &str)>, +) -> String { debug!("highlighting: ================\n{}\n==============", src); let sess = parse::ParseSess::new(FilePathMapping::empty()); let fm = sess.source_map().new_source_file(FileName::Custom("stdin".to_string()), @@ -373,9 +376,9 @@ impl Class { } fn write_header(class: Option<&str>, out: &mut dyn Write) -> io::Result<()> { - write!(out, "
\n", class.unwrap_or(""))
+ write!(out, "\n", class.unwrap_or(""))
}
fn write_footer(out: &mut dyn Write) -> io::Result<()> {
- write!(out, "\n")
+ write!(out, "\n")
}
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 1c61e73fae03c..c83c5d382ddcc 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -1709,6 +1709,7 @@ impl<'a> Settings<'a> {
("method-docs", "Auto-hide item methods' documentation", false),
("go-to-only-result", "Directly go to item in search if there is only one result",
false),
+ ("line-numbers", "Show line numbers on code examples", false),
],
root_path,
suffix,
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 6307dda454da8..9d1a5c3837830 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -2093,6 +2093,7 @@
return wrapper;
}
+ var hideItemDeclarations = getCurrentValue('rustdoc-item-declarations') === "false";
onEach(document.getElementsByClassName('docblock'), function(e) {
if (hasClass(e, 'autohide')) {
var wrap = e.previousElementSibling;
@@ -2116,16 +2117,14 @@
}
}
if (e.parentNode.id === "main") {
- var otherMessage;
+ var otherMessage = '';
var fontSize;
var extraClass;
- var show = true;
if (hasClass(e, "type-decl")) {
fontSize = "20px";
otherMessage = ' Show declaration';
- show = getCurrentValue('rustdoc-item-declarations') === "false";
- if (!show) {
+ if (hideItemDeclarations === false) {
extraClass = 'collapsed';
}
} else if (hasClass(e, "non-exhaustive")) {
@@ -2142,8 +2141,12 @@
extraClass = "marg-left";
}
- e.parentNode.insertBefore(createToggle(otherMessage, fontSize, extraClass, show), e);
- if (otherMessage && show) {
+ e.parentNode.insertBefore(createToggle(otherMessage,
+ fontSize,
+ extraClass,
+ hideItemDeclarations),
+ e);
+ if (otherMessage.length > 0 && hideItemDeclarations === true) {
collapseDocs(e.previousSibling.childNodes[0], "toggle");
}
}
@@ -2186,13 +2189,33 @@
});
}
+ // To avoid checking on "rustdoc-item-attributes" value on every loop...
+ var itemAttributesFunc = function() {};
+ if (getCurrentValue("rustdoc-item-attributes") !== "false") {
+ itemAttributesFunc = function(x) {
+ collapseDocs(x.previousSibling.childNodes[0], "toggle");
+ };
+ }
onEach(document.getElementById('main').getElementsByClassName('attributes'), function(i_e) {
i_e.parentNode.insertBefore(createToggleWrapper(toggle.cloneNode(true)), i_e);
- if (getCurrentValue("rustdoc-item-attributes") !== "false") {
- collapseDocs(i_e.previousSibling.childNodes[0], "toggle");
- }
+ itemAttributesFunc(i_e);
});
+ // To avoid checking on "rustdoc-line-numbers" value on every loop...
+ var lineNumbersFunc = function() {};
+ if (getCurrentValue("rustdoc-line-numbers") === "true") {
+ lineNumbersFunc = function(x) {
+ var count = x.textContent.split('\n').length;
+ var elems = [];
+ for (var i = 0; i < count; ++i) {
+ elems.push(i + 1);
+ }
+ var node = document.createElement('pre');
+ addClass(node, 'line-number');
+ node.innerHTML = elems.join('\n');
+ x.parentNode.insertBefore(node, x);
+ };
+ }
onEach(document.getElementsByClassName('rust-example-rendered'), function(e) {
if (hasClass(e, 'compile_fail')) {
e.addEventListener("mouseover", function(event) {
@@ -2209,6 +2232,7 @@
e.previousElementSibling.childNodes[0].style.color = '';
});
}
+ lineNumbersFunc(e);
});
function showModal(content) {
diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css
index ee811f3379239..5817a22574953 100644
--- a/src/librustdoc/html/static/rustdoc.css
+++ b/src/librustdoc/html/static/rustdoc.css
@@ -283,6 +283,24 @@ nav.sub {
padding-left: 0;
}
+.example-wrap {
+ display: inline-flex;
+ width: 100%;
+}
+
+.example-wrap > pre.line-number {
+ overflow: initial;
+ border: 1px solid;
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px;
+ padding: 13px 8px;
+ text-align: right;
+}
+
+.example-wrap > pre.rust {
+ width: 100%;
+}
+
#search {
margin-left: 230px;
position: relative;
diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css
index 34a1d71beecfc..e179c4586bc74 100644
--- a/src/librustdoc/html/static/themes/dark.css
+++ b/src/librustdoc/html/static/themes/dark.css
@@ -233,6 +233,10 @@ pre.rust .question-mark {
color: #ff9011;
}
+.example-wrap > pre.line-number {
+ border-color: #4a4949;
+}
+
a.test-arrow {
background-color: rgba(78, 139, 202, 0.2);
}
diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css
index 8218b1b371ea7..6ef9875ea2d4d 100644
--- a/src/librustdoc/html/static/themes/light.css
+++ b/src/librustdoc/html/static/themes/light.css
@@ -227,6 +227,10 @@ pre.rust .question-mark {
color: #ff9011;
}
+.example-wrap > pre.line-number {
+ border-color: #c7c7c7;
+}
+
a.test-arrow {
background-color: rgba(78, 139, 202, 0.2);
}