File tree Expand file tree Collapse file tree 3 files changed +39
-5
lines changed
Expand file tree Collapse file tree 3 files changed +39
-5
lines changed Original file line number Diff line number Diff line change @@ -6,7 +6,7 @@ use std::convert::TryFrom;
66
77use crate :: arena_tree;
88#[ cfg( feature = "phoenix_heex" ) ]
9- pub use crate :: parser:: phoenix_heex:: NodeHeexBlock ;
9+ pub use crate :: parser:: phoenix_heex:: { HeexNode , NodeHeexBlock } ;
1010#[ cfg( feature = "shortcodes" ) ]
1111pub use crate :: parser:: shortcodes:: NodeShortCode ;
1212
Original file line number Diff line number Diff line change @@ -944,12 +944,28 @@ where
944944
945945 let tag_name_len = scanners:: phoenix_opening_tag ( & line[ self . first_nonspace ..] ) ?;
946946
947+ Some ( tag_name_len)
948+ }
949+
950+ #[ cfg( feature = "phoenix_heex" ) ]
951+ fn is_heex_opening_self_closing_tag ( & self , line : & str , expected_tag_name : & str ) -> bool {
952+ let Some ( tag_name_len) = scanners:: phoenix_opening_tag ( & line[ self . first_nonspace ..] ) else {
953+ return false ;
954+ } ;
955+
956+ let line_tag_name = & line[ self . first_nonspace + 1 ..=self . first_nonspace + tag_name_len] ;
957+
958+ if line_tag_name != expected_tag_name {
959+ return false ;
960+ }
961+
947962 let bytes = & line. as_bytes ( ) [ self . first_nonspace ..] ;
948- if bytes. len ( ) >= 2 && bytes[ bytes. len ( ) - 2 ] == b'/' && bytes[ bytes. len ( ) - 1 ] == b'>' {
949- return None ;
963+ let mut end = bytes. len ( ) ;
964+ while end > 0 && strings:: is_line_end_char ( bytes[ end - 1 ] ) {
965+ end -= 1 ;
950966 }
951967
952- Some ( tag_name_len )
968+ end >= 2 && bytes [ end - 2 ] == b'/' && bytes [ end - 1 ] == b'>'
953969 }
954970
955971 #[ cfg( feature = "phoenix_heex" ) ]
@@ -1675,7 +1691,7 @@ where
16751691 ..self . first_nonspace + 2 + closing_tag_name_len] ;
16761692 closing_tag_name == tag_name
16771693 } else {
1678- false
1694+ self . is_heex_opening_self_closing_tag ( line , tag_name )
16791695 }
16801696 }
16811697 phoenix_heex:: HeexNode :: Directive => {
Original file line number Diff line number Diff line change @@ -1603,6 +1603,24 @@ fn block_with_multiple_consecutive_empty_lines() {
16031603 ) ;
16041604}
16051605
1606+ #[ test]
1607+ fn self_closing_followed_by_content ( ) {
1608+ html_opts ! (
1609+ [ extension. phoenix_heex] ,
1610+ concat!( "<.btn />\n " , "\n " , "After\n " ) ,
1611+ concat!( "<.btn />\n " , "<p>After</p>\n " ) ,
1612+ ) ;
1613+ }
1614+
1615+ #[ test]
1616+ fn self_closing_component_followed_by_content ( ) {
1617+ html_opts ! (
1618+ [ extension. phoenix_heex] ,
1619+ concat!( "<Component.render />\n " , "\n " , "After\n " ) ,
1620+ concat!( "<Component.render />\n " , "<p>After</p>\n " ) ,
1621+ ) ;
1622+ }
1623+
16061624// ============================================================================
16071625// output formats
16081626// ============================================================================
You can’t perform that action at this time.
0 commit comments