@@ -75,6 +75,8 @@ use html::item_type::ItemType;
75
75
use html:: markdown:: { self , Markdown , MarkdownHtml , MarkdownSummaryLine , RenderType } ;
76
76
use html:: { highlight, layout} ;
77
77
78
+ use html_diff;
79
+
78
80
/// A pair of name and its optional document.
79
81
pub type NameDoc = ( String , Option < String > ) ;
80
82
@@ -1643,6 +1645,33 @@ fn document(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item) -> fmt::Re
1643
1645
Ok ( ( ) )
1644
1646
}
1645
1647
1648
+ fn get_html_diff ( w : & mut fmt:: Formatter , md_text : & str , render_type : RenderType ,
1649
+ prefix : & str ) -> fmt:: Result {
1650
+ let output = format ! ( "{}" , Markdown ( md_text, render_type) ) ;
1651
+ let old = format ! ( "{}" , Markdown ( md_text, match render_type {
1652
+ RenderType :: Hoedown => RenderType :: Pulldown ,
1653
+ RenderType :: Pulldown => RenderType :: Hoedown ,
1654
+ } ) ) ;
1655
+ let differences = html_diff:: get_differences ( & output, & old) ;
1656
+ if !differences. is_empty ( ) {
1657
+ println ! ( "Differences spotted in {:?}:\n {}" ,
1658
+ md_text,
1659
+ differences. iter( )
1660
+ . filter_map( |s| {
1661
+ match * s {
1662
+ html_diff:: Difference :: NodeText { ref elem_text,
1663
+ ref opposite_elem_text,
1664
+ .. }
1665
+ if elem_text. trim( ) == opposite_elem_text. trim( ) => None ,
1666
+ _ => Some ( format!( "=> {}" , s. to_string( ) ) ) ,
1667
+ }
1668
+ } )
1669
+ . collect:: <Vec <String >>( )
1670
+ . join( "\n " ) ) ;
1671
+ }
1672
+ write ! ( w, "<div class='docblock'>{}{}</div>" , prefix, output)
1673
+ }
1674
+
1646
1675
fn document_short ( w : & mut fmt:: Formatter , item : & clean:: Item , link : AssocItemLink ,
1647
1676
render_type : RenderType , prefix : & str ) -> fmt:: Result {
1648
1677
if let Some ( s) = item. doc_value ( ) {
@@ -1652,7 +1681,7 @@ fn document_short(w: &mut fmt::Formatter, item: &clean::Item, link: AssocItemLin
1652
1681
} else {
1653
1682
format ! ( "{}" , & plain_summary_line( Some ( s) ) )
1654
1683
} ;
1655
- write ! ( w, "<div class='docblock'>{}{}</div>" , prefix , Markdown ( & markdown, render_type) ) ?;
1684
+ get_html_diff ( w, & markdown, render_type, prefix ) ?;
1656
1685
} else if !prefix. is_empty ( ) {
1657
1686
write ! ( w, "<div class='docblock'>{}</div>" , prefix) ?;
1658
1687
}
@@ -1676,7 +1705,7 @@ fn render_assoc_const_value(item: &clean::Item) -> String {
1676
1705
fn document_full ( w : & mut fmt:: Formatter , item : & clean:: Item ,
1677
1706
render_type : RenderType , prefix : & str ) -> fmt:: Result {
1678
1707
if let Some ( s) = item. doc_value ( ) {
1679
- write ! ( w, "<div class='docblock'>{}{}</div>" , prefix , Markdown ( s, render_type) ) ?;
1708
+ get_html_diff ( w, s, render_type, prefix ) ?;
1680
1709
} else if !prefix. is_empty ( ) {
1681
1710
write ! ( w, "<div class='docblock'>{}</div>" , prefix) ?;
1682
1711
}
0 commit comments