@@ -41,10 +41,12 @@ impl Default for Filter {
4141enum SourceLanguage {
4242 Rust ,
4343 Java ,
44+ Cpp ,
4445}
4546
4647const IDENTS_RS : & [ & str ] = & [ "debug" , "info" , "warn" ] ;
4748const IDENTS_JAVA : & [ & str ] = & [ "logger" , "log" , "fine" , "debug" , "info" , "warn" , "trace" ] ;
49+ const IDENTS_CPP : & [ & str ] = & [ "debug" , "info" , "warn" , "trace" ] ;
4850
4951impl SourceLanguage {
5052 fn get_query ( & self ) -> & str {
@@ -75,13 +77,25 @@ impl SourceLanguage {
7577 )
7678 "#
7779 }
80+ SourceLanguage :: Cpp => {
81+ r#"
82+ (compound_statement
83+ (expression_statement
84+ (call_expression
85+ arguments: (argument_list (string_literal) @arguments)
86+ )
87+ )
88+ )
89+ "#
90+ }
7891 }
7992 }
8093
8194 fn get_identifiers ( & self ) -> & [ & str ] {
8295 match self {
8396 SourceLanguage :: Rust => IDENTS_RS ,
8497 SourceLanguage :: Java => IDENTS_JAVA ,
98+ SourceLanguage :: Cpp => IDENTS_CPP ,
8599 }
86100 }
87101}
@@ -511,6 +525,25 @@ fn namedarg(name: &str) {
511525 ) ;
512526 }
513527
528+ const CPP_SOURCE : & str = r#"
529+ #include <stdio.h>
530+
531+ int main(int argc, char* argv[]) {
532+ printf("Hello, %s!", argv[1]);
533+ }
534+ "# ;
535+
536+ #[ test]
537+ fn test_basic_cpp ( ) {
538+ let log_ref = LogRef :: new ( "Hello, Steve!" ) ;
539+ let code = CodeSource :: new ( PathBuf :: from ( "in-mem.cc" ) , Box :: new ( CPP_SOURCE . as_bytes ( ) ) ) ;
540+ let src_refs = extract_logging ( & mut [ code] ) ;
541+ assert_eq ! ( src_refs. len( ) , 1 ) ;
542+ let vars = extract_variables ( log_ref, & src_refs[ 0 ] ) ;
543+ assert_eq ! ( vars. len( ) , 1 ) ;
544+ assert_eq ! ( vars. get( "argv[1]" ) . map( |val| val. as_str( ) ) , Some ( "Steve" ) ) ;
545+ }
546+
514547 #[ test]
515548 fn test_find_possible_paths ( ) {
516549 let code = CodeSource :: new ( PathBuf :: from ( "in-mem.rs" ) , Box :: new ( TEST_SOURCE . as_bytes ( ) ) ) ;
0 commit comments