diff --git a/.github/workflows/sync_typeshed.yaml b/.github/workflows/sync_typeshed.yaml index 20925a523e370..d1785034e1ca4 100644 --- a/.github/workflows/sync_typeshed.yaml +++ b/.github/workflows/sync_typeshed.yaml @@ -46,10 +46,6 @@ jobs: cp -r typeshed/stdlib ruff/crates/red_knot_vendored/vendor/typeshed/stdlib rm -rf ruff/crates/red_knot_vendored/vendor/typeshed/stdlib/@tests git -C typeshed rev-parse HEAD > ruff/crates/red_knot_vendored/vendor/typeshed/source_commit.txt - # Patch the typeshed stubs to include `knot_extensions` - ln -s ../../../knot_extensions/knot_extensions.pyi ruff/crates/red_knot_vendored/vendor/typeshed/stdlib/ - echo "# Patch applied for red_knot:" >> ruff/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS - echo "knot_extensions: 3.0-" >> ruff/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS - name: Commit the changes id: commit if: ${{ steps.sync.outcome == 'success' }} diff --git a/crates/red_knot_vendored/build.rs b/crates/red_knot_vendored/build.rs index 08ad3418bff8c..965dd34025ec3 100644 --- a/crates/red_knot_vendored/build.rs +++ b/crates/red_knot_vendored/build.rs @@ -6,6 +6,7 @@ //! in `crates/red_knot_vendored/vendor/typeshed` change. use std::fs::File; +use std::io::Write; use std::path::Path; use path_slash::PathExt; @@ -14,6 +15,7 @@ use zip::write::{FileOptions, ZipWriter}; use zip::CompressionMethod; const TYPESHED_SOURCE_DIR: &str = "vendor/typeshed"; +const KNOT_EXTENSIONS_STUBS: &str = "knot_extensions/knot_extensions.pyi"; const TYPESHED_ZIP_LOCATION: &str = "/zipped_typeshed.zip"; /// Recursively zip the contents of an entire directory. @@ -55,9 +57,14 @@ fn zip_dir(directory_path: &str, writer: File) -> ZipResult { // Some unzip tools unzip files with directory paths correctly, some do not! if absolute_path.is_file() { println!("adding file {absolute_path:?} as {normalized_relative_path:?} ..."); - zip.start_file(normalized_relative_path, options)?; + zip.start_file(&*normalized_relative_path, options)?; let mut f = File::open(absolute_path)?; std::io::copy(&mut f, &mut zip).unwrap(); + + // Patch the VERSIONS file to make `knot_extensions` available + if normalized_relative_path == "stdlib/VERSIONS" { + writeln!(&mut zip, "knot_extensions: 3.0-")?; + } } else if !normalized_relative_path.is_empty() { // Only if not root! Avoids path spec / warning // and mapname conversion failed error on unzip @@ -65,11 +72,17 @@ fn zip_dir(directory_path: &str, writer: File) -> ZipResult { zip.add_directory(normalized_relative_path, options)?; } } + + // Patch typeshed and add the stubs for the `knot_extensions` module + println!("adding file {KNOT_EXTENSIONS_STUBS} as stdlib/knot_extensions.pyi ..."); + zip.start_file("stdlib/knot_extensions.pyi", options)?; + let mut f = File::open(KNOT_EXTENSIONS_STUBS)?; + std::io::copy(&mut f, &mut zip).unwrap(); + zip.finish() } fn main() { - println!("cargo::rerun-if-changed={TYPESHED_SOURCE_DIR}"); assert!( Path::new(TYPESHED_SOURCE_DIR).is_dir(), "Where is typeshed?" diff --git a/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS b/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS index 6cb47d4bfeb13..3c6898dc1a777 100644 --- a/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS +++ b/crates/red_knot_vendored/vendor/typeshed/stdlib/VERSIONS @@ -341,5 +341,3 @@ zipfile._path: 3.12- zipimport: 3.0- zlib: 3.0- zoneinfo: 3.9- -# Patch applied for red_knot: -knot_extensions: 3.0- diff --git a/crates/red_knot_vendored/vendor/typeshed/stdlib/knot_extensions.pyi b/crates/red_knot_vendored/vendor/typeshed/stdlib/knot_extensions.pyi deleted file mode 120000 index 8e6b527c81002..0000000000000 --- a/crates/red_knot_vendored/vendor/typeshed/stdlib/knot_extensions.pyi +++ /dev/null @@ -1 +0,0 @@ -../../../knot_extensions/knot_extensions.pyi \ No newline at end of file