1- use clap:: Args ;
2- use std:: path:: PathBuf ;
3-
41use crate :: languages;
2+ use clap:: Args ;
53use codeql_extractor:: extractor:: desugaring;
64use codeql_extractor:: trap;
7-
5+ use std:: path:: Path ;
6+ use std:: path:: PathBuf ;
7+ use std:: { env, fs} ;
88#[ derive( Args ) ]
99pub struct Options {
1010 /// Sets a custom source archive folder
@@ -31,6 +31,33 @@ pub fn run(options: Options) -> std::io::Result<()> {
3131 lang. prefix = "unified" ;
3232 }
3333
34+ let scratch_dir = std:: env:: var ( "CODEQL_EXTRACTOR_UNIFIED_SCRATCH_DIR" )
35+ . expect ( "failed to read CODEQL_EXTRACTOR_UNIFIED_SCRATCH_DIR environment variable" ) ;
36+ let builtins_path = env:: var ( "CODEQL_EXTRACTOR_UNIFIED_ROOT" )
37+ . map ( |path| Path :: new ( & path) . join ( "tools" ) . join ( "builtins" ) )
38+ . expect ( "failed to read CODEQL_EXTRACTOR_UNIFIED_ROOT environment variable" ) ;
39+ let builtins_dir = fs:: read_dir ( builtins_path) . expect ( "failed to read builtins directory" ) ;
40+ let mut builtins_list = PathBuf :: new ( ) ;
41+ builtins_list. push ( scratch_dir. clone ( ) ) ;
42+ builtins_list. push ( "builtins" ) ;
43+ builtins_list. set_extension ( "list" ) ;
44+
45+ let mut builtins_list_file = fs:: OpenOptions :: new ( )
46+ . create_new ( true )
47+ . write ( true )
48+ . open ( & builtins_list)
49+ . expect ( "failed to open file list" ) ;
50+ for entry in builtins_dir {
51+ let entry = entry. expect ( "failed to read builtins directory" ) ;
52+ let path = entry. path ( ) ;
53+ if path. extension ( ) . is_some_and ( |ext| ext == "swift" ) {
54+ use std:: io:: Write ;
55+ writeln ! ( builtins_list_file, "{}" , path. display( ) )
56+ . expect ( "failed to write to file list" ) ;
57+ }
58+ }
59+ drop ( builtins_list_file) ;
60+
3461 let extractor = desugaring:: Extractor {
3562 prefix : "unified" . to_string ( ) ,
3663 languages,
@@ -39,7 +66,7 @@ pub fn run(options: Options) -> std::io::Result<()> {
3966 "CODEQL_EXTRACTOR_UNIFIED_OPTION_TRAP_COMPRESSION" ,
4067 ) ,
4168 source_archive_dir : options. source_archive_dir ,
42- file_lists : vec ! [ options. file_list] ,
69+ file_lists : vec ! [ options. file_list, builtins_list ] ,
4370 } ;
4471
4572 extractor. run ( )
0 commit comments