Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion crates/ra_ide/src/snapshots/highlight_doctest.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@
.keyword.unsafe { color: #BC8383; font-weight: bold; }
.control { font-style: italic; }
</style>
<pre><code><span class="keyword">struct</span> <span class="struct declaration">Foo</span> {
<pre><code><span class="comment documentation">/// ```</span>
<span class="comment documentation">/// </span><span class="keyword">let</span> _ = <span class="string_literal">"early doctests should not go boom"</span>;
<span class="comment documentation">/// ```</span>
<span class="keyword">struct</span> <span class="struct declaration">Foo</span> {
<span class="field declaration">bar</span>: <span class="builtin_type">bool</span>,
}

Expand Down
12 changes: 8 additions & 4 deletions crates/ra_ide/src/syntax_highlighting/injection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,17 +155,21 @@ pub(super) fn highlight_doc_comment(
let mut start_offset = None;
let mut end_offset = None;
for (line_start, orig_line_start) in range_mapping.range(..h.range.end()).rev() {
// It's possible for orig_line_start - line_start to be negative. Add h.range.start()
// here and remove it from the end range after the loop below so that the values are
// always non-negative.
let offset = h.range.start() + orig_line_start - line_start;
if line_start <= &h.range.start() {
start_offset.get_or_insert(orig_line_start - line_start);
start_offset.get_or_insert(offset);
break;
} else {
end_offset.get_or_insert(orig_line_start - line_start);
end_offset.get_or_insert(offset);
}
}
if let Some(start_offset) = start_offset {
h.range = TextRange::new(
h.range.start() + start_offset,
h.range.end() + end_offset.unwrap_or(start_offset),
start_offset,
h.range.end() + end_offset.unwrap_or(start_offset) - h.range.start(),
);

stack.add(h);
Expand Down
3 changes: 3 additions & 0 deletions crates/ra_ide/src/syntax_highlighting/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,9 @@ fn main() {
fn test_highlight_doctest() {
check_highlighting(
r#"
/// ```
/// let _ = "early doctests should not go boom";
/// ```
struct Foo {
bar: bool,
}
Expand Down