@@ -10,6 +10,10 @@ extern crate core;
1010extern crate getopts;
1111extern crate regex;
1212
13+ use getopts:: Options ;
14+ use regex:: Captures ;
15+ use regex:: Regex ;
16+
1317use core:: borrow:: Borrow ;
1418use std:: collections:: HashMap ;
1519use std:: env;
@@ -18,15 +22,15 @@ use std::io::BufRead;
1822use std:: io:: LineWriter ;
1923use std:: io:: Write ;
2024
21- use getopts:: Options ;
22- use regex:: Captures ;
23- use regex:: Regex ;
24-
2525fn create_options ( ) -> Options {
2626 let mut opts = Options :: new ( ) ;
2727 opts. optflag ( "h" , "help" , "print this help menu and exit" ) ;
2828 opts. optflag ( "V" , "version" , "print the version and exit" ) ;
29- opts. optflag ( "g" , "greedy-defaults" , "allow expansion of undefined variable defaults" ) ;
29+ opts. optflag (
30+ "g" ,
31+ "greedy-defaults" ,
32+ "allow expansion of undefined variable defaults" ,
33+ ) ;
3034 opts. optmulti (
3135 "v" ,
3236 "variable" ,
@@ -93,9 +97,9 @@ fn main() {
9397 regex:: escape( prefix. clone( ) . as_str( ) ) ,
9498 regex:: escape( suffix. clone( ) . as_str( ) )
9599 )
96- . as_str ( ) ,
100+ . as_str ( ) ,
97101 )
98- . unwrap ( )
102+ . unwrap ( ) ,
99103 ) ,
100104 false => None ,
101105 } ;
@@ -169,35 +173,43 @@ fn main() {
169173 for ( _, ( regex, value) ) in & vars {
170174 let val = & value. clone ( ) ;
171175 out = regex
172- . replace_all ( out. as_str ( ) , |caps : & Captures | match caps. get ( 2 ) {
173- Some ( mat) => match mat. as_str ( ) {
174- ":-" => match val. borrow ( ) {
175- Some ( v) => {
176- if v. is_empty ( ) {
177- caps. get ( 3 ) . map_or ( "" , |m| m. as_str ( ) )
178- } else {
179- v. as_str ( )
176+ . replace_all ( out. as_str ( ) , |caps : & Captures | -> String {
177+ match caps. get ( 2 ) {
178+ Some ( mat) => match mat. as_str ( ) {
179+ ":-" => match val. borrow ( ) {
180+ Some ( v) => {
181+ if v. is_empty ( ) {
182+ caps. get ( 3 ) . map_or ( "" , |m| m. as_str ( ) )
183+ } else {
184+ v. as_str ( )
185+ }
180186 }
181- }
182- None => caps. get ( 3 ) . map_or ( "" , |m| m. as_str ( ) ) ,
187+ None => caps. get ( 3 ) . map_or ( "" , |m| m. as_str ( ) ) ,
188+ } ,
189+ _ => match val. borrow ( ) {
190+ Some ( v) => v. as_str ( ) ,
191+ None => caps. get ( 3 ) . map_or ( "" , |m| m. as_str ( ) ) ,
192+ } ,
183193 } ,
184- _ => match val. borrow ( ) {
194+ None => match val. borrow ( ) {
185195 Some ( v) => v. as_str ( ) ,
186- None => caps. get ( 3 ) . map_or ( "" , |m| m . as_str ( ) ) ,
196+ None => caps. get ( 0 ) . unwrap ( ) . as_str ( ) ,
187197 } ,
188- } ,
189- None => match val. borrow ( ) {
190- Some ( v) => v. as_str ( ) ,
191- None => caps. get ( 0 ) . unwrap ( ) . as_str ( ) ,
192- } ,
198+ }
199+ . to_string ( )
193200 } )
194201 . to_string ( ) ;
195202 }
196203 out = match greedy. clone ( ) {
197- Some ( regex) => regex. replace_all (
198- out. as_str ( ) ,
199- |caps : & Captures | caps. get ( 1 ) . map_or ( "" , |m| m. as_str ( ) )
200- ) . to_string ( ) ,
204+ Some ( regex) => regex
205+ . replace_all ( out. as_str ( ) , |caps : & Captures | -> String {
206+ caps. get ( 1 )
207+ . clone ( )
208+ . map_or ( "" , |m| m. as_str ( ) )
209+ . clone ( )
210+ . to_string ( )
211+ } )
212+ . to_string ( ) ,
201213 None => out,
202214 } ;
203215 writer. write ( out. as_bytes ( ) ) . unwrap ( ) ;
0 commit comments