@@ -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=\" \n asd\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]
578582fn 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