Add line numbers option to rustdoc
This commit is contained in:
parent
eb50e75729
commit
e961d397ca
@ -28,9 +28,12 @@
|
||||
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 @@ fn rustdoc_class(self) -> &'static str {
|
||||
}
|
||||
|
||||
fn write_header(class: Option<&str>, out: &mut dyn Write) -> io::Result<()> {
|
||||
write!(out, "<pre class=\"rust {}\">\n", class.unwrap_or(""))
|
||||
write!(out, "<div class=\"example-wrap\"><pre class=\"rust {}\">\n", class.unwrap_or(""))
|
||||
}
|
||||
|
||||
fn write_footer(out: &mut dyn Write) -> io::Result<()> {
|
||||
write!(out, "</pre>\n")
|
||||
write!(out, "</pre></div>\n")
|
||||
}
|
||||
|
@ -1709,6 +1709,7 @@ pub fn new(root_path: &'a str, suffix: &'a str) -> 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,
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user