1#![doc = include_str!("../README.md")]
2
3use std::sync::LazyLock;
4
5use ruff_db::vendored::VendoredFileSystem;
6
7pub const SOURCE_COMMIT: &str = include_str!("../vendor/typeshed/source_commit.txt").trim_ascii_end();
9
10static TYPESHED_ZIP_BYTES: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/zipped_typeshed.zip"));
13
14#[must_use]
15pub fn file_system() -> &'static VendoredFileSystem {
16 static VENDORED_TYPESHED_STUBS: LazyLock<VendoredFileSystem> =
17 LazyLock::new(|| VendoredFileSystem::new_static(TYPESHED_ZIP_BYTES).unwrap());
18 &VENDORED_TYPESHED_STUBS
19}
20
21#[cfg(test)]
22mod tests {
23 use std::io::{self, Read};
24
25 use super::*;
26
27 #[test]
28 fn test_commit() {
29 assert_eq!(SOURCE_COMMIT.len(), 40);
30 }
31
32 #[test]
33 fn typeshed_zip_created_at_build_time() {
34 let mut typeshed_zip_archive = zip::ZipArchive::new(io::Cursor::new(TYPESHED_ZIP_BYTES)).unwrap();
35
36 let mut builtins_stub = typeshed_zip_archive.by_name("stdlib/builtins.pyi").unwrap();
37 assert!(builtins_stub.is_file());
38
39 let mut builtins_source = String::new();
40 builtins_stub.read_to_string(&mut builtins_source).unwrap();
41
42 assert!(builtins_source.contains("class int:"));
43 }
44
45 #[test]
46 fn typeshed_versions_file_exists() {
47 let mut typeshed_zip_archive = zip::ZipArchive::new(io::Cursor::new(TYPESHED_ZIP_BYTES)).unwrap();
48
49 let mut versions_file = typeshed_zip_archive.by_name("stdlib/VERSIONS").unwrap();
50 assert!(versions_file.is_file());
51
52 let mut versions_content = String::new();
53 versions_file.read_to_string(&mut versions_content).unwrap();
54
55 assert!(versions_content.contains("builtins:"));
57 }
58}