Skip to content

Commit 1da43c7

Browse files
committed
WIP: make the parser actually advance in tags
1 parent 0be8d01 commit 1da43c7

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/librustdoc/passes/lint/html_tags.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ pub(crate) fn visit_item(cx: &DocContext<'_>, item: &Item, hir_id: HirId, dox: &
165165
if !tagp.tag_name.is_empty() {
166166
report_diag(format!("incomplete HTML tag `{}`", &tagp.tag_name), &(tagp.tag_start_pos..dox.len()), false);
167167
}
168-
for (tag, range) in tagp.tags.iter().filter(|(t, range)| {
168+
for (tag, range) in tagp.tags.iter().filter(|(t, _)| {
169169
let t = t.to_lowercase();
170170
!is_implicitly_self_closing(&t)
171171
}) {
@@ -347,6 +347,7 @@ impl TagParser {
347347
None if self.tag_name.is_empty() => (prev_pos, '\0'),
348348
None => break,
349349
};
350+
dbg!(pos, c, &self.in_attrs, &self.tag_name);
350351
prev_pos = pos;
351352
if !self.in_attrs && c == '/' && self.tag_name.is_empty() {
352353
// Checking if this is a closing tag (like `</a>` for `<a>`).
@@ -441,6 +442,9 @@ impl TagParser {
441442
} else if self.quote.is_none() {
442443
self.after_eq = false;
443444
}
445+
if !is_self_closing && !self.tag_name.is_empty() {
446+
iter.next();
447+
}
444448
}
445449
// if we've run out of text but still haven't found a `>`,
446450
// return early without calling `tag_parsed` or emitting lints.
@@ -539,7 +543,7 @@ fn test_extract_tags_nested_unclosed() {
539543
use std::cell::RefCell;
540544

541545
let mut tagp = TagParser::new();
542-
let mut diags = RefCell::new(Vec::new());
546+
let diags = RefCell::new(Vec::new());
543547
let dox = "<div>\n<br</div>";
544548
tagp.extract_tags(dox, 0..dox.len(), &mut None, &|s, r, b| {
545549
diags.borrow_mut().push((s, r.clone(), b));
@@ -553,7 +557,7 @@ fn test_extract_tags_taglike_in_attr() {
553557
use std::cell::RefCell;
554558

555559
let mut tagp = TagParser::new();
556-
let mut diags = RefCell::new(Vec::new());
560+
let diags = RefCell::new(Vec::new());
557561
let dox = "<img src='<div>'>";
558562
tagp.extract_tags(dox, 0..dox.len(), &mut None, &|s, r, b| {
559563
diags.borrow_mut().push((s, r.clone(), b));
@@ -566,24 +570,26 @@ fn test_extract_tags_taglike_in_multiline_attr() {
566570
use std::cell::RefCell;
567571

568572
let mut tagp = TagParser::new();
569-
let mut diags = RefCell::new(Vec::new());
573+
let diags = RefCell::new(Vec::new());
570574
let dox = "<img src=\"\nasd\n<div>\n\">";
571575
tagp.extract_tags(dox, 0..dox.len(), &mut None, &|s, r, b| {
572576
diags.borrow_mut().push((s, r.clone(), b));
573577
});
574578
assert_eq!(diags.borrow().len(), 0, "unexpected diagnostics: {diags:?}");
575579
}
576580

577-
/*#[test]
581+
#[test]
578582
fn test_extract_tags_taglike_in_multievent_attr() {
579583
use std::cell::RefCell;
580584

581585
let mut tagp = TagParser::new();
582-
let mut diags = RefCell::new(Vec::new());
586+
let diags = RefCell::new(Vec::new());
583587
let dox = "<img src='<div>'>";
584588
let split_point = 10;
585-
tagp.extract_tags(dox, 0..dox.len(), &mut None, &|s, r, b| {
589+
let mut p = |range: Range<usize>| tagp.extract_tags(&dox[range.clone()], range, &mut None, &|s, r, b| {
586590
diags.borrow_mut().push((s, r.clone(), b));
587591
});
592+
p(0..split_point);
593+
p(split_point..dox.len());
588594
assert_eq!(diags.borrow().len(), 0, "unexpected diagnostics: {diags:?}");
589-
}*/
595+
}

0 commit comments

Comments
 (0)