@@ -18,7 +18,7 @@ use ra_ap_ide_db::line_index::{LineCol, LineIndex};
1818use ra_ap_ide_db:: RootDatabase ;
1919use ra_ap_parser:: SyntaxKind ;
2020use ra_ap_span:: { EditionedFileId , TextSize } ;
21- use ra_ap_syntax:: ast:: HasName ;
21+ use ra_ap_syntax:: ast:: { Const , Fn , HasName , Static } ;
2222use ra_ap_syntax:: {
2323 ast, AstNode , NodeOrToken , SyntaxElementChildren , SyntaxError , SyntaxNode , SyntaxToken ,
2424 TextRange ,
@@ -563,7 +563,34 @@ impl<'a> Translator<'a> {
563563 } ) ( ) ;
564564 }
565565
566- pub ( crate ) fn should_be_excluded ( & self , item : & impl ast:: HasAttrs ) -> bool {
566+ pub ( crate ) fn should_be_excluded ( & self , item : & ( impl ast:: HasAttrs + ast:: AstNode ) ) -> bool {
567+ if "true"
568+ == std:: env:: var ( "CODEQL_EXTRACTOR_RUST_OPTION_EXCLUDE_BODIES" ) . unwrap_or_default ( )
569+ {
570+ let syntax = item. syntax ( ) ;
571+ if let Some ( body) = syntax. parent ( ) . and_then ( Fn :: cast) . and_then ( |x| x. body ( ) ) {
572+ if body. syntax ( ) == item. syntax ( ) {
573+ log:: warn!( "Skipping Fn body" ) ;
574+ return true ;
575+ }
576+ }
577+ if let Some ( body) = syntax. parent ( ) . and_then ( Const :: cast) . and_then ( |x| x. body ( ) ) {
578+ if body. syntax ( ) == item. syntax ( ) {
579+ log:: warn!( "Skipping Const body" ) ;
580+ return true ;
581+ }
582+ }
583+ if let Some ( body) = syntax
584+ . parent ( )
585+ . and_then ( Static :: cast)
586+ . and_then ( |x| x. body ( ) )
587+ {
588+ if body. syntax ( ) == item. syntax ( ) {
589+ log:: warn!( "Skipping Static body" ) ;
590+ return true ;
591+ }
592+ }
593+ }
567594 self . semantics . is_some_and ( |sema| {
568595 item. attrs ( ) . any ( |attr| {
569596 attr. as_simple_call ( ) . is_some_and ( |( name, tokens) | {
0 commit comments