Skip to main content

monty_typeshed/
lib.rs

1#![doc = include_str!("../README.md")]
2
3use std::sync::LazyLock;
4
5use ruff_db::vendored::VendoredFileSystem;
6
7/// The source commit of the vendored typeshed.
8pub const SOURCE_COMMIT: &str = include_str!("../vendor/typeshed/source_commit.txt").trim_ascii_end();
9
10// The file path here is hardcoded in this crate's `build.rs` script.
11// Luckily this crate will fail to build if this file isn't available at build time.
12static 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        // VERSIONS file should contain module version info like "builtins: 3.0-"
56        assert!(versions_content.contains("builtins:"));
57    }
58}