@@ -49,10 +49,16 @@ fn try_with_syntax(syntax: &SyntaxReference, code: &str) -> Result<String> {
4949 Ok ( html_generator. finalize ( ) )
5050}
5151
52- fn select_syntax ( name : Option < & str > , code : & str ) -> & ' static SyntaxReference {
52+ fn select_syntax (
53+ name : Option < & str > ,
54+ code : & str ,
55+ default : Option < & str > ,
56+ ) -> & ' static SyntaxReference {
5357 name. and_then ( |name| {
5458 if name. is_empty ( ) {
55- return SYNTAXES . find_syntax_by_token ( "rust" ) ;
59+ if let Some ( default) = default {
60+ return SYNTAXES . find_syntax_by_token ( default) ;
61+ }
5662 }
5763 SYNTAXES . find_syntax_by_token ( name) . or_else ( || {
5864 name. rsplit_once ( '.' )
@@ -63,12 +69,12 @@ fn select_syntax(name: Option<&str>, code: &str) -> &'static SyntaxReference {
6369 . unwrap_or_else ( || SYNTAXES . find_syntax_plain_text ( ) )
6470}
6571
66- pub fn try_with_lang ( lang : Option < & str > , code : & str ) -> Result < String > {
67- try_with_syntax ( select_syntax ( lang, code) , code)
72+ pub fn try_with_lang ( lang : Option < & str > , code : & str , default : Option < & str > ) -> Result < String > {
73+ try_with_syntax ( select_syntax ( lang, code, default ) , code)
6874}
6975
70- pub fn with_lang ( lang : Option < & str > , code : & str ) -> String {
71- match try_with_lang ( lang, code) {
76+ pub fn with_lang ( lang : Option < & str > , code : & str , default : Option < & str > ) -> String {
77+ match try_with_lang ( lang, code, default ) {
7278 Ok ( highlighted) => highlighted,
7379 Err ( err) => {
7480 if err. is :: < LimitsExceeded > ( ) {
@@ -92,23 +98,29 @@ mod tests {
9298
9399 #[ test]
94100 fn custom_filetypes ( ) {
95- let toml = select_syntax ( Some ( "toml" ) , "" ) ;
101+ let toml = select_syntax ( Some ( "toml" ) , "" , None ) ;
96102
97- assert_eq ! ( select_syntax( Some ( "Cargo.toml.orig" ) , "" ) . name, toml. name) ;
98- assert_eq ! ( select_syntax( Some ( "Cargo.lock" ) , "" ) . name, toml. name) ;
103+ assert_eq ! (
104+ select_syntax( Some ( "Cargo.toml.orig" ) , "" , None ) . name,
105+ toml. name
106+ ) ;
107+ assert_eq ! ( select_syntax( Some ( "Cargo.lock" ) , "" , None ) . name, toml. name) ;
99108 }
100109
101110 #[ test]
102111 fn dotfile_with_extension ( ) {
103- let toml = select_syntax ( Some ( "toml" ) , "" ) ;
112+ let toml = select_syntax ( Some ( "toml" ) , "" , None ) ;
104113
105- assert_eq ! ( select_syntax( Some ( ".rustfmt.toml" ) , "" ) . name, toml. name) ;
114+ assert_eq ! (
115+ select_syntax( Some ( ".rustfmt.toml" ) , "" , None ) . name,
116+ toml. name
117+ ) ;
106118 }
107119
108120 #[ test]
109121 fn limits ( ) {
110122 let is_limited = |s : String | {
111- try_with_lang ( Some ( "toml" ) , & s)
123+ try_with_lang ( Some ( "toml" ) , & s, None )
112124 . unwrap_err ( )
113125 . is :: < LimitsExceeded > ( )
114126 } ;
@@ -119,7 +131,7 @@ mod tests {
119131 #[ test]
120132 fn limited_escaped ( ) {
121133 let text = "<p>\n " . to_string ( ) + "aa" . repeat ( PER_LINE_BYTE_LENGTH_LIMIT ) . as_str ( ) ;
122- let highlighted = with_lang ( Some ( "toml" ) , & text) ;
134+ let highlighted = with_lang ( Some ( "toml" ) , & text, None ) ;
123135 assert ! ( highlighted. starts_with( "<p>\n " ) ) ;
124136 }
125137}
0 commit comments