diff --git a/MODULE.bazel b/MODULE.bazel index f0190e3e2477..8b85af746df2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -52,7 +52,7 @@ bazel_dep(name = "rules_rust", version = "0.66.0") rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain( - edition = "2021", + edition = "2024", extra_target_triples = ["wasm32-unknown-unknown"], versions = ["1.90.0"], ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index fa33e2854a2d..5efa1f07f95a 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -461,6 +461,126 @@ ] } }, + "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { + "general": { + "bzlTransitiveDigest": "1DR1RguiWNFvp43dhy2aLYMlA5eex0Q4e6WBEWHZ9As=", + "usagesDigest": "LmZVvxYzkz+XTFT5BPtvzwnqtm9j2zcW4BXaBKnqHks=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "pnpm": { + "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_rule", + "attributes": { + "package": "pnpm", + "version": "8.6.7", + "root_package": "", + "link_workspace": "", + "link_packages": {}, + "integrity": "sha512-vRIWpD/L4phf9Bk2o/O2TDR8fFoJnpYrp2TKqTIZF/qZ2/rgL3qKXzHofHgbXsinwMoSEigz28sqk3pQ+yMEQQ==", + "url": "", + "commit": "", + "patch_args": [ + "-p0" + ], + "patches": [], + "custom_postinstall": "", + "npm_auth": "", + "npm_auth_basic": "", + "npm_auth_username": "", + "npm_auth_password": "", + "lifecycle_hooks": [], + "extra_build_content": "load(\"@aspect_rules_js//js:defs.bzl\", \"js_binary\")\njs_binary(name = \"pnpm\", data = glob([\"package/**\"]), entry_point = \"package/dist/pnpm.cjs\", visibility = [\"//visibility:public\"])", + "generate_bzl_library_targets": false, + "extract_full_archive": true, + "exclude_package_contents": [], + "system_tar": "auto" + } + }, + "pnpm__links": { + "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links", + "attributes": { + "package": "pnpm", + "version": "8.6.7", + "dev": false, + "root_package": "", + "link_packages": {}, + "deps": {}, + "transitive_closure": {}, + "lifecycle_build_target": false, + "lifecycle_hooks_env": [], + "lifecycle_hooks_execution_requirements": [ + "no-sandbox" + ], + "lifecycle_hooks_use_default_shell_env": false, + "bins": {}, + "package_visibility": [ + "//visibility:public" + ], + "replace_package": "", + "exclude_package_contents": [] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "aspect_bazel_lib+", + "aspect_bazel_lib", + "aspect_bazel_lib+" + ], + [ + "aspect_bazel_lib+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "aspect_bazel_lib+", + "bazel_tools", + "bazel_tools" + ], + [ + "aspect_rules_js+", + "aspect_bazel_lib", + "aspect_bazel_lib+" + ], + [ + "aspect_rules_js+", + "aspect_rules_js", + "aspect_rules_js+" + ], + [ + "aspect_rules_js+", + "aspect_tools_telemetry_report", + "aspect_tools_telemetry++telemetry+aspect_tools_telemetry_report" + ], + [ + "aspect_rules_js+", + "bazel_features", + "bazel_features+" + ], + [ + "aspect_rules_js+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "aspect_rules_js+", + "bazel_tools", + "bazel_tools" + ], + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ] + ] + } + }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { "bzlTransitiveDigest": "OTdzhOnr7ljBUNk1eX617DHw3zj6jt1DhqUAtzofaDw=", @@ -532,6 +652,123 @@ ] } }, + "@@pybind11_bazel+//:python_configure.bzl%extension": { + "general": { + "bzlTransitiveDigest": "d4N/SZrl3ONcmzE98rcV0Fsro0iUbjNQFTIiLiGuH+k=", + "usagesDigest": "fycyB39YnXIJkfWCIXLUKJMZzANcuLy9ZE73hRucjFk=", + "recordedFileInputs": { + "@@pybind11_bazel+//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e" + }, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "local_config_python": { + "repoRuleId": "@@pybind11_bazel+//:python_configure.bzl%python_configure", + "attributes": {} + }, + "pybind11": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@pybind11_bazel+//:pybind11.BUILD", + "strip_prefix": "pybind11-2.11.1", + "urls": [ + "https://github.com/pybind/pybind11/archive/v2.11.1.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "pybind11_bazel+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_fuzzing+//fuzzing/private:extensions.bzl%non_module_dependencies": { + "general": { + "bzlTransitiveDigest": "mGiTB79hRNjmeDTQdzkpCHyzXhErMbufeAmySBt7s5s=", + "usagesDigest": "wy6ISK6UOcBEjj/mvJ/S3WeXoO67X+1llb9yPyFtPgc=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "platforms": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz", + "https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz" + ], + "sha256": "8150406605389ececb6da07cbcb509d5637a3ab9a24bc69b1101531367d89d74" + } + }, + "rules_python": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "d70cd72a7a4880f0000a6346253414825c19cdd40a28289bdf67b8e6480edff8", + "strip_prefix": "rules_python-0.28.0", + "url": "https://github.com/bazelbuild/rules_python/releases/download/0.28.0/rules_python-0.28.0.tar.gz" + } + }, + "bazel_skylib": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", + "urls": [ + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz" + ] + } + }, + "com_google_absl": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/abseil/abseil-cpp/archive/refs/tags/20240116.1.zip" + ], + "strip_prefix": "abseil-cpp-20240116.1", + "integrity": "sha256-7capMWOvWyoYbUaHF/b+I2U6XLMaHmky8KugWvfXYuk=" + } + }, + "rules_fuzzing_oss_fuzz": { + "repoRuleId": "@@rules_fuzzing+//fuzzing/private/oss_fuzz:repository.bzl%oss_fuzz_repository", + "attributes": {} + }, + "honggfuzz": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@rules_fuzzing+//:honggfuzz.BUILD", + "sha256": "6b18ba13bc1f36b7b950c72d80f19ea67fbadc0ac0bb297ec89ad91f2eaa423e", + "url": "https://github.com/google/honggfuzz/archive/2.5.zip", + "strip_prefix": "honggfuzz-2.5" + } + }, + "rules_fuzzing_jazzer": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_jar", + "attributes": { + "sha256": "ee6feb569d88962d59cb59e8a31eb9d007c82683f3ebc64955fd5b96f277eec2", + "url": "https://repo1.maven.org/maven2/com/code-intelligence/jazzer/0.20.1/jazzer-0.20.1.jar" + } + }, + "rules_fuzzing_jazzer_api": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_jar", + "attributes": { + "sha256": "f5a60242bc408f7fa20fccf10d6c5c5ea1fcb3c6f44642fec5af88373ae7aa1b", + "url": "https://repo1.maven.org/maven2/com/code-intelligence/jazzer-api/0.20.1/jazzer-api-0.20.1.jar" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_fuzzing+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_graalvm+//:extensions.bzl%graalvm": { "general": { "bzlTransitiveDigest": "JVrrjgwiNfmXUk4e8xpjbxuUmMM3lc0fWN966+kFiwc=", @@ -618,139 +855,2633 @@ "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", "strip_prefix": "rules_android-0.1.1", "urls": [ - "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_kotlin+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_nodejs+//nodejs:extensions.bzl%node": { + "general": { + "bzlTransitiveDigest": "rphcryfYrOY/P3emfTskC/GY5YuHcwMl2B2ncjaM8lY=", + "usagesDigest": "SkWsEOtDTVTHm4N4MVB6sGz8faIlzAc7uxanVNi4G6I=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "nodejs_linux_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "linux_amd64" + } + }, + "nodejs_linux_arm64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "linux_arm64" + } + }, + "nodejs_linux_s390x": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "linux_s390x" + } + }, + "nodejs_linux_ppc64le": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "linux_ppc64le" + } + }, + "nodejs_darwin_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "darwin_amd64" + } + }, + "nodejs_darwin_arm64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "darwin_arm64" + } + }, + "nodejs_windows_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "attributes": { + "node_download_auth": {}, + "node_repositories": {}, + "node_urls": [ + "https://nodejs.org/dist/v{version}/{filename}" + ], + "node_version": "22.11.0", + "include_headers": false, + "platform": "windows_amd64" + } + }, + "nodejs": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "attributes": { + "user_node_repository_name": "nodejs" + } + }, + "nodejs_host": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "attributes": { + "user_node_repository_name": "nodejs" + } + }, + "nodejs_toolchains": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_toolchains_repo.bzl%nodejs_toolchains_repo", + "attributes": { + "user_node_repository_name": "nodejs" + } + } + }, + "recordedRepoMappingEntries": [] + } + }, + "@@rules_python+//python/private/pypi:pip.bzl%pip_internal": { + "general": { + "bzlTransitiveDigest": "seF3dlpt/Lqu+L5MsxQ6wnCcl2BCEdyq1QxZUKC7ugE=", + "usagesDigest": "OLoIStnzNObNalKEMRq99FqenhPGLFZ5utVLV4sz7OI=", + "recordedFileInputs": { + "@@rules_python+//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc", + "@@rules_python+//tools/publish/requirements_linux.txt": "8175b4c8df50ae2f22d1706961884beeb54e7da27bd2447018314a175981997d", + "@@rules_python+//tools/publish/requirements_windows.txt": "7673adc71dc1a81d3661b90924d7a7c0fc998cd508b3cb4174337cef3f2de556" + }, + "recordedDirentsInputs": {}, + "envVariables": { + "RULES_PYTHON_REPO_DEBUG": null, + "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null + }, + "generatedRepoSpecs": { + "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "backports.tarfile-1.2.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "backports-tarfile==1.2.0", + "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", + "urls": [ + "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "backports_tarfile-1.2.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "backports-tarfile==1.2.0", + "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", + "urls": [ + "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "certifi-2024.8.30-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", + "urls": [ + "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_certifi_sdist_bec941d2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "certifi-2024.8.30.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", + "urls": [ + "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "urls": [ + "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "urls": [ + "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "urls": [ + "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "urls": [ + "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "urls": [ + "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", + "urls": [ + "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_sdist_1c39c601": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cffi-1.17.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "urls": [ + "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "urls": [ + "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "urls": [ + "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "urls": [ + "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "urls": [ + "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "urls": [ + "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "urls": [ + "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "urls": [ + "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "urls": [ + "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "urls": [ + "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "urls": [ + "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "urls": [ + "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "urls": [ + "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "urls": [ + "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "charset_normalizer-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "urls": [ + "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", + "urls": [ + "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", + "urls": [ + "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", + "urls": [ + "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", + "urls": [ + "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", + "urls": [ + "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", + "urls": [ + "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_sdist_315b9001": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cryptography-43.0.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", + "urls": [ + "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "docutils-0.21.2.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", + "urls": [ + "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_idna_sdist_12f65c9b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "idna-3.10.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "urls": [ + "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "importlib_metadata-8.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "urls": [ + "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "importlib_metadata-8.5.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", + "urls": [ + "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.classes-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", + "urls": [ + "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco.classes-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", + "urls": [ + "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.context-6.0.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", + "urls": [ + "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_context-6.0.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", + "urls": [ + "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.functools-4.1.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", + "urls": [ + "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_functools-4.1.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", + "urls": [ + "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "jeepney-0.8.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jeepney==0.8.0", + "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", + "urls": [ + "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jeepney-0.8.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jeepney==0.8.0", + "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "urls": [ + "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "keyring-25.4.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "keyring==25.4.1", + "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", + "urls": [ + "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_keyring_sdist_b07ebc55": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "keyring-25.4.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "keyring==25.4.1", + "sha256": "b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b", + "urls": [ + "https://files.pythonhosted.org/packages/a5/1c/2bdbcfd5d59dc6274ffb175bc29aa07ecbfab196830e0cfbde7bd861a2ea/keyring-25.4.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "markdown_it_py-3.0.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "markdown-it-py==3.0.0", + "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "urls": [ + "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "markdown-it-py-3.0.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "markdown-it-py==3.0.0", + "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", + "urls": [ + "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "mdurl-0.1.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "mdurl==0.1.2", + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "urls": [ + "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "mdurl-0.1.2.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "mdurl==0.1.2", + "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", + "urls": [ + "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "more_itertools-10.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", + "urls": [ + "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "more-itertools-10.5.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", + "urls": [ + "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", + "urls": [ + "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", + "urls": [ + "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200", + "urls": [ + "https://files.pythonhosted.org/packages/45/b9/833f385403abaf0023c6547389ec7a7acf141ddd9d1f21573723a6eab39a/nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", + "urls": [ + "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", + "urls": [ + "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", + "urls": [ + "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", + "urls": [ + "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", + "urls": [ + "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe", + "urls": [ + "https://files.pythonhosted.org/packages/a3/da/0c4e282bc3cff4a0adf37005fa1fb42257673fbc1bbf7d1ff639ec3d255a/nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", + "urls": [ + "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", + "urls": [ + "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", + "urls": [ + "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_sdist_94a16692": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "nh3-0.2.18.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", + "urls": [ + "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pkginfo-1.10.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", + "urls": [ + "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pkginfo-1.10.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", + "urls": [ + "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "pycparser-2.22-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pycparser==2.22", + "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", + "urls": [ + "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pycparser_sdist_491c8be9": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pycparser-2.22.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pycparser==2.22", + "sha256": "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "urls": [ + "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pygments-2.18.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pygments==2.18.0", + "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", + "urls": [ + "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pygments_sdist_786ff802": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pygments-2.18.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pygments==2.18.0", + "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "urls": [ + "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", + "urls": [ + "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pywin32-ctypes-0.2.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", + "urls": [ + "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "readme_renderer-44.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "readme-renderer==44.0", + "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", + "urls": [ + "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "readme_renderer-44.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "readme-renderer==44.0", + "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", + "urls": [ + "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "requests-2.32.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", + "urls": [ + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_sdist_55365417": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-2.32.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests==2.32.3", + "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "urls": [ + "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", + "urls": [ + "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-toolbelt-1.0.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "urls": [ + "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "urls": [ + "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rfc3986-2.0.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", + "urls": [ + "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rich_py3_none_any_9836f509": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rich-13.9.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.3", + "sha256": "9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", + "urls": [ + "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl" ] } - } - }, - "recordedRepoMappingEntries": [ - [ - "rules_kotlin+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@rules_nodejs+//nodejs:extensions.bzl%node": { - "general": { - "bzlTransitiveDigest": "rphcryfYrOY/P3emfTskC/GY5YuHcwMl2B2ncjaM8lY=", - "usagesDigest": "SkWsEOtDTVTHm4N4MVB6sGz8faIlzAc7uxanVNi4G6I=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "nodejs_linux_amd64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + }, + "rules_python_publish_deps_311_rich_sdist_bc1e01b8": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "linux_amd64" + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rich-13.9.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.3", + "sha256": "bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e", + "urls": [ + "https://files.pythonhosted.org/packages/d9/e9/cf9ef5245d835065e6673781dbd4b8911d352fb770d56cf0879cf11b7ee1/rich-13.9.3.tar.gz" + ] } }, - "nodejs_linux_arm64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "linux_arm64" + "filename": "SecretStorage-3.3.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "secretstorage==3.3.3", + "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", + "urls": [ + "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" + ] } }, - "nodejs_linux_s390x": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "linux_s390x" + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "SecretStorage-3.3.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "secretstorage==3.3.3", + "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", + "urls": [ + "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" + ] } }, - "nodejs_linux_ppc64le": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "linux_ppc64le" + "filename": "twine-5.1.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", + "urls": [ + "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" + ] } }, - "nodejs_darwin_amd64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "rules_python_publish_deps_311_twine_sdist_9aa08251": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "darwin_amd64" + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "twine-5.1.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", + "urls": [ + "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" + ] } }, - "nodejs_darwin_arm64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "darwin_arm64" + "filename": "urllib3-2.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "urls": [ + "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" + ] } }, - "nodejs_windows_amd64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", + "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" ], - "node_version": "22.11.0", - "include_headers": false, - "platform": "windows_amd64" + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "urllib3-2.2.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", + "urls": [ + "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" + ] } }, - "nodejs": { - "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "user_node_repository_name": "nodejs" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "zipp-3.20.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "urls": [ + "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" + ] } }, - "nodejs_host": { - "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", "attributes": { - "user_node_repository_name": "nodejs" + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "zipp-3.20.2.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", + "urls": [ + "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" + ] } }, - "nodejs_toolchains": { - "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_toolchains_repo.bzl%nodejs_toolchains_repo", - "attributes": { - "user_node_repository_name": "nodejs" + "rules_python_publish_deps": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "rules_python_publish_deps", + "extra_hub_aliases": {}, + "whl_map": { + "backports_tarfile": "[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\",\"version\":\"3.11\"},{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\",\"version\":\"3.11\"}]", + "certifi": "[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\",\"version\":\"3.11\"},{\"filename\":\"certifi-2024.8.30.tar.gz\",\"repo\":\"rules_python_publish_deps_311_certifi_sdist_bec941d2\",\"version\":\"3.11\"}]", + "cffi": "[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_cffi_sdist_1c39c601\",\"version\":\"3.11\"}]", + "charset_normalizer": "[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\",\"version\":\"3.11\"}]", + "cryptography": "[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_cryptography_sdist_315b9001\",\"version\":\"3.11\"}]", + "docutils": "[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\",\"version\":\"3.11\"},{\"filename\":\"docutils-0.21.2.tar.gz\",\"repo\":\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\",\"version\":\"3.11\"}]", + "idna": "[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\",\"version\":\"3.11\"},{\"filename\":\"idna-3.10.tar.gz\",\"repo\":\"rules_python_publish_deps_311_idna_sdist_12f65c9b\",\"version\":\"3.11\"}]", + "importlib_metadata": "[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\",\"version\":\"3.11\"},{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\",\"version\":\"3.11\"}]", + "jaraco_classes": "[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\",\"version\":\"3.11\"},{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\",\"version\":\"3.11\"}]", + "jaraco_context": "[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\",\"version\":\"3.11\"},{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\",\"version\":\"3.11\"}]", + "jaraco_functools": "[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\",\"version\":\"3.11\"},{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\",\"version\":\"3.11\"}]", + "jeepney": "[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\",\"version\":\"3.11\"},{\"filename\":\"jeepney-0.8.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\",\"version\":\"3.11\"}]", + "keyring": "[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\",\"version\":\"3.11\"},{\"filename\":\"keyring-25.4.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\",\"version\":\"3.11\"}]", + "markdown_it_py": "[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\",\"version\":\"3.11\"},{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\",\"version\":\"3.11\"}]", + "mdurl": "[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\",\"version\":\"3.11\"},{\"filename\":\"mdurl-0.1.2.tar.gz\",\"repo\":\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\",\"version\":\"3.11\"}]", + "more_itertools": "[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\",\"version\":\"3.11\"},{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\",\"version\":\"3.11\"}]", + "nh3": "[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18.tar.gz\",\"repo\":\"rules_python_publish_deps_311_nh3_sdist_94a16692\",\"version\":\"3.11\"}]", + "pkginfo": "[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\",\"version\":\"3.11\"},{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\",\"version\":\"3.11\"}]", + "pycparser": "[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\",\"version\":\"3.11\"},{\"filename\":\"pycparser-2.22.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\",\"version\":\"3.11\"}]", + "pygments": "[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\",\"version\":\"3.11\"},{\"filename\":\"pygments-2.18.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pygments_sdist_786ff802\",\"version\":\"3.11\"}]", + "pywin32_ctypes": "[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\",\"version\":\"3.11\"},{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\",\"version\":\"3.11\"}]", + "readme_renderer": "[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\",\"version\":\"3.11\"},{\"filename\":\"readme_renderer-44.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\",\"version\":\"3.11\"}]", + "requests": "[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\",\"version\":\"3.11\"},{\"filename\":\"requests-2.32.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_requests_sdist_55365417\",\"version\":\"3.11\"}]", + "requests_toolbelt": "[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\",\"version\":\"3.11\"},{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\",\"version\":\"3.11\"}]", + "rfc3986": "[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\",\"version\":\"3.11\"},{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\",\"version\":\"3.11\"}]", + "rich": "[{\"filename\":\"rich-13.9.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_rich_py3_none_any_9836f509\",\"version\":\"3.11\"},{\"filename\":\"rich-13.9.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_rich_sdist_bc1e01b8\",\"version\":\"3.11\"}]", + "secretstorage": "[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\",\"version\":\"3.11\"},{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\",\"version\":\"3.11\"}]", + "twine": "[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\",\"version\":\"3.11\"},{\"filename\":\"twine-5.1.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_twine_sdist_9aa08251\",\"version\":\"3.11\"}]", + "urllib3": "[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\",\"version\":\"3.11\"},{\"filename\":\"urllib3-2.2.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\",\"version\":\"3.11\"}]", + "zipp": "[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\",\"version\":\"3.11\"},{\"filename\":\"zipp-3.20.2.tar.gz\",\"repo\":\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\",\"version\":\"3.11\"}]" + }, + "packages": [ + "backports_tarfile", + "certifi", + "charset_normalizer", + "docutils", + "idna", + "importlib_metadata", + "jaraco_classes", + "jaraco_context", + "jaraco_functools", + "keyring", + "markdown_it_py", + "mdurl", + "more_itertools", + "nh3", + "pkginfo", + "pygments", + "readme_renderer", + "requests", + "requests_toolbelt", + "rfc3986", + "rich", + "twine", + "urllib3", + "zipp" + ], + "groups": {} } } }, - "recordedRepoMappingEntries": [] + "recordedRepoMappingEntries": [ + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ], + [ + "rules_python+", + "bazel_features", + "bazel_features+" + ], + [ + "rules_python+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_python+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_python+", + "pypi__build", + "rules_python++internal_deps+pypi__build" + ], + [ + "rules_python+", + "pypi__click", + "rules_python++internal_deps+pypi__click" + ], + [ + "rules_python+", + "pypi__colorama", + "rules_python++internal_deps+pypi__colorama" + ], + [ + "rules_python+", + "pypi__importlib_metadata", + "rules_python++internal_deps+pypi__importlib_metadata" + ], + [ + "rules_python+", + "pypi__installer", + "rules_python++internal_deps+pypi__installer" + ], + [ + "rules_python+", + "pypi__more_itertools", + "rules_python++internal_deps+pypi__more_itertools" + ], + [ + "rules_python+", + "pypi__packaging", + "rules_python++internal_deps+pypi__packaging" + ], + [ + "rules_python+", + "pypi__pep517", + "rules_python++internal_deps+pypi__pep517" + ], + [ + "rules_python+", + "pypi__pip", + "rules_python++internal_deps+pypi__pip" + ], + [ + "rules_python+", + "pypi__pip_tools", + "rules_python++internal_deps+pypi__pip_tools" + ], + [ + "rules_python+", + "pypi__pyproject_hooks", + "rules_python++internal_deps+pypi__pyproject_hooks" + ], + [ + "rules_python+", + "pypi__setuptools", + "rules_python++internal_deps+pypi__setuptools" + ], + [ + "rules_python+", + "pypi__tomli", + "rules_python++internal_deps+pypi__tomli" + ], + [ + "rules_python+", + "pypi__wheel", + "rules_python++internal_deps+pypi__wheel" + ], + [ + "rules_python+", + "pypi__zipp", + "rules_python++internal_deps+pypi__zipp" + ], + [ + "rules_python+", + "pythons_hub", + "rules_python++python+pythons_hub" + ], + [ + "rules_python++python+pythons_hub", + "python_3_10_host", + "rules_python++python+python_3_10_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_11_host", + "rules_python++python+python_3_11_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_12_host", + "rules_python++python+python_3_12_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_8_host", + "rules_python++python+python_3_8_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_9_host", + "rules_python++python+python_3_9_host" + ] + ] } }, "@@rules_rust+//crate_universe:extension.bzl%crate": { @@ -761,37 +3492,37 @@ "@@//.cargo/config.toml": "3c2c15666dd61127d12c2e17a582baf32f567c9392680bd0b1fce208491f907f", "@@//Cargo.lock": "effac1df27416de4cba597740813d211d54fc00ea37bfe6ac4ba51dbd2e49193", "@@//Cargo.toml": "37582fbbeca4b3a1b3e2b0cee2425e7c4f773673d4967388f58a56f6cdc8130b", - "@@//app/rust-ffi/Cargo.toml": "341d7da83d45eb0eb280e87b2e0871a7c0b19afe35651c44e2557f1a3ef6fb57", - "@@//build_tools/base/Cargo.toml": "b94c5bcd4b5496f2d2fa91d777fbc0aa71790ede935f1dbd0297a1e3c9e473c1", - "@@//build_tools/build/Cargo.toml": "9ae31f201962a5b98c52558e627a1467fa085a8addfe1a6f9427553573d1eea7", - "@@//build_tools/ci-gen/Cargo.toml": "c82d963d95674d1d38486eb7aedda3093719e16efc38f759e69dffe6b376abf9", - "@@//build_tools/ci_utils/Cargo.toml": "1510f9a01d9f25f1e1a0535b6c6560d974bd0d613f008f95f82a22eb15344191", - "@@//build_tools/cli/Cargo.toml": "b963832fcfdff2026b9ad8736c01120c921375efbe5711adbadf6e696912c2ef", - "@@//build_tools/enso-formatter/Cargo.toml": "045807605c2dcc7b02598c2d0d49a41e990ab6ff96d54e5684e69c3abe29e9ce", - "@@//build_tools/install/Cargo.toml": "196d37f4307e343dd81517dec28336a8e23e0498195484c56e30b9cd40e027e1", - "@@//build_tools/install/config/Cargo.toml": "a6d15eb23a5f90467f680b296fe2e35af904f9ff00ce9530d754c96728288008", - "@@//build_tools/install/installer/Cargo.toml": "285f8e82a63acb798f9b19307e2f9a16ae7f1cc73bbec40804249cab86ea879e", - "@@//build_tools/install/uninstaller/Cargo.toml": "7e6f6f09afcbf534f7784eccd884d6f76479cd290069fa4f17ba1cf9b9e284f8", - "@@//build_tools/macros/lib/Cargo.toml": "9cd827c2abf32278530d4312e45a9ecd15c122cc180289ed1a58a632f46d1911", - "@@//lib/rust/launcher-shims/Cargo.toml": "06feb8a75339e7399009f0a5b527daea14ece8052eddf011caf2e6477a404959", - "@@//lib/rust/macro-utils/Cargo.toml": "dc51f4ed6a821ca9d5b179b8af471b900ca592f9475e9b7b4953205e625d9376", - "@@//lib/rust/metamodel/Cargo.toml": "20f5bb60a5c394ee059eecf25bcf5d3dd15151600e50cbc069c1e4fdb77d7ab9", - "@@//lib/rust/metamodel/lexpr/Cargo.toml": "a2ffa93729cda0a36a9ee9f8b4538433387fcd1338818e76a4e1f55ff22dec3f", + "@@//app/rust-ffi/Cargo.toml": "0d2f72c0f53164b31fc5760db7c508ef6ac58554348e9bc3670930676f708ba0", + "@@//build_tools/base/Cargo.toml": "8ae0f553b7916eeac9347ba5f4e53f19cbb0807d4b038caf689299b7c1e7c9da", + "@@//build_tools/build/Cargo.toml": "1f5d2dcdf62160fb61883a6498ac51ad51d85a7585d0b21c85a2a4b050312c12", + "@@//build_tools/ci-gen/Cargo.toml": "84131544093caf2f3e1742c918d96fd13d5b63bfc7f9db7724fe62020a5670ff", + "@@//build_tools/ci_utils/Cargo.toml": "107da50826d1f21882b1970e011425859ea099c60a645834ea9e092cda2fe80e", + "@@//build_tools/cli/Cargo.toml": "a9e5539e9d93aaff03c9f0d003fd093022db0a3637f6ec8dc8c10960556ea84c", + "@@//build_tools/enso-formatter/Cargo.toml": "1cdaf32e3f4a22b963e784e399f75bbed300857c10ac3c7529efad4e78bf08b9", + "@@//build_tools/install/Cargo.toml": "adaf39107bee4ff99fea362125bcb148a473bfc130d5b641451574220e13d816", + "@@//build_tools/install/config/Cargo.toml": "55056624335a3443c2b93e634c00a7046fd4c3b4657da736f2d864d160ca5372", + "@@//build_tools/install/installer/Cargo.toml": "9fb573c38fd47d2a4b8c1c430bffd4be4b5bd55b7967557a1820c874fa19985e", + "@@//build_tools/install/uninstaller/Cargo.toml": "66fa13f0ad62840989196469decf0036c5e23b8363b3116e37feadf437d8f539", + "@@//build_tools/macros/lib/Cargo.toml": "27d56ca1709e62d3f1ea2a515438535204afbd14f1783508987f2cd44180bf27", + "@@//lib/rust/launcher-shims/Cargo.toml": "b07f0f4c67147c8030978dd48358cbf943457864b5c16ca26f67ee8e16128e72", + "@@//lib/rust/macro-utils/Cargo.toml": "d750c737d59a64e778b6f7f8531b17bc8d48e75b5d8da4b92d5d7f9ef9e8e371", + "@@//lib/rust/metamodel/Cargo.toml": "8c7baa47f6ad6052d43d169743ac84018fecd550f58cb16e1f0e571c09e59183", + "@@//lib/rust/metamodel/lexpr/Cargo.toml": "5c32c422ce5b40b8047e4835146809c2ae845a6c8482284c9a09aba8b3567035", "@@//lib/rust/parser/Cargo.toml": "6146ce5f4591391b388830e4681898d9447eeea4481f2b75729cb67d9817b605", - "@@//lib/rust/parser/debug/Cargo.toml": "123ba3bd04f6b30978806962b709771efb7affbd1128410f96b868e3fef2b77b", - "@@//lib/rust/parser/debug/fuzz/Cargo.toml": "d93cea0a1b3a5e96ea99d0f57c7a07361b6e3b46afb95dab362e7562d86655d0", - "@@//lib/rust/parser/generate-java/Cargo.toml": "c74133c954f6c6ef3b8af72a466a313ca583f7130e7c4c5779c8c352d8d96a65", - "@@//lib/rust/parser/jni/Cargo.toml": "947d49e0fdaaab2af2f5ab5234022ae4f0bc9be655e3c43f47057b2a908d7bf3", - "@@//lib/rust/parser/macros/Cargo.toml": "9fc49ad3ce7cf5cc9190b0c7142ea9d3761810ba55057a0a452ed4963fbefdb0", - "@@//lib/rust/parser/schema/Cargo.toml": "3b46eb4d9790376071ee9662d7db0a57b6f3b68363ae01a0619adc4fcf4c3427", - "@@//lib/rust/parser/src/syntax/tree/visitor/Cargo.toml": "b09c13de3fe8b9312aff19ac18fa79844cff8b475e1f53dad02e77ba194f11f2", - "@@//lib/rust/prelude/Cargo.toml": "d247be5470788ea62ada9fcc9aeb65be876c77fc7a0689a660c43b266bd6c504", - "@@//lib/rust/prelude/macros/Cargo.toml": "a9d16f186f2150a2ea71fd5d49c52e88f1d72585f1af9147645d43add1c6177d", - "@@//lib/rust/reflect/Cargo.toml": "35ff77f390f825bef4f2158cd374f85dda5cce0efcc86a0da5e27cb57cb4ec21", - "@@//lib/rust/reflect/macros/Cargo.toml": "1f321b2223735b13bca416cd921791bbe5e8e25bca07db43cde243d40f1bfa01", - "@@//lib/rust/zst/Cargo.toml": "f5d27286724c600906948c7363b55f06b218ae28d465f6270bc1377236203419", - "@@//tools/language-server/logstat/Cargo.toml": "fea49c9513b3680bda7c2c0c6e7fdc6668ffd8ee1bfe2fab9e948c9e8166c433", - "@@//tools/language-server/wstest/Cargo.toml": "6a871b143010cad32e670e8ff7b0512a5204a66498bf461165874c28ea1b764e" + "@@//lib/rust/parser/debug/Cargo.toml": "4680e5c6f3f0095dcfa844dbaded641bd49c93ad3ad586233307d77c87e80030", + "@@//lib/rust/parser/debug/fuzz/Cargo.toml": "fcf7a7a8ef8cbf942154e94d611ada8de87f53251c4cb54b0c7e8845479573d6", + "@@//lib/rust/parser/generate-java/Cargo.toml": "c7e4b77ba16651d7173e91181b5e239225d6124b9c2af35f640493dfcaea7355", + "@@//lib/rust/parser/jni/Cargo.toml": "f52f5b423216163ee7a14f7968809d0fc39969778f3a3019dfc47fe7b3954c15", + "@@//lib/rust/parser/macros/Cargo.toml": "b6c4840812e6ef9c99a5ffbd514aa23bf5bed3835de8f9bdf5b8327662ed8678", + "@@//lib/rust/parser/schema/Cargo.toml": "64f27c54bd54749ae66849d74bbe7395ea6df91acf616d93cef45b4f7c80e7db", + "@@//lib/rust/parser/src/syntax/tree/visitor/Cargo.toml": "359945ddbb3aa5a6dc31f48dc89bc36fcb721ff31ed06cc9d5a4f6d1076d458c", + "@@//lib/rust/prelude/Cargo.toml": "ec7bf401446cd5781e5bd5478baf8e29886559f895c581aae421d87e2dd7f09b", + "@@//lib/rust/prelude/macros/Cargo.toml": "7db62a6aea2b955873a52d18dfac156d8b2da827c8e4185907b39a80f03b61ca", + "@@//lib/rust/reflect/Cargo.toml": "97f3b29d3ff8161f43331f49b0b2f88293bef6aebf45b9e6e63c8326c5cf5f0a", + "@@//lib/rust/reflect/macros/Cargo.toml": "c5818432877f790f460224ecdf178bb4fbb4c165539d6ad54885f82d9c5b17e2", + "@@//lib/rust/zst/Cargo.toml": "93de2a58a57279bf4ab3b638f1459e99aa631ceec8fa00ec31c2b3aa53315ed5", + "@@//tools/language-server/logstat/Cargo.toml": "3fe624e61baa5cc136f555a9546aa0c6703e2bc6f5ee18d449590735e3a0c415", + "@@//tools/language-server/wstest/Cargo.toml": "2362a7548bd3ada8d611af1ef74f065d6a1eec6e6b05195eec0a5ad9f4d7703d" }, "recordedDirentsInputs": {}, "envVariables": { @@ -8563,6 +11294,148 @@ ] } }, + "@@rules_rust+//crate_universe/private:internal_extensions.bzl%cu_nr": { + "general": { + "bzlTransitiveDigest": "dzOemhl6nH3SkF1s+6t3CJkZ6n/DD9osUcA+tnul2QE=", + "usagesDigest": "h9wqdPgSnpDxdRNP6kO+DMoTuAWtxtek2SnJOOL321c=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "cargo_bazel_bootstrap": { + "repoRuleId": "@@rules_rust+//cargo/private:cargo_bootstrap.bzl%cargo_bootstrap_repository", + "attributes": { + "srcs": [ + "@@rules_rust+//crate_universe:src/api.rs", + "@@rules_rust+//crate_universe:src/api/lockfile.rs", + "@@rules_rust+//crate_universe:src/cli.rs", + "@@rules_rust+//crate_universe:src/cli/generate.rs", + "@@rules_rust+//crate_universe:src/cli/query.rs", + "@@rules_rust+//crate_universe:src/cli/render.rs", + "@@rules_rust+//crate_universe:src/cli/splice.rs", + "@@rules_rust+//crate_universe:src/cli/vendor.rs", + "@@rules_rust+//crate_universe:src/config.rs", + "@@rules_rust+//crate_universe:src/context.rs", + "@@rules_rust+//crate_universe:src/context/crate_context.rs", + "@@rules_rust+//crate_universe:src/context/platforms.rs", + "@@rules_rust+//crate_universe:src/lib.rs", + "@@rules_rust+//crate_universe:src/lockfile.rs", + "@@rules_rust+//crate_universe:src/main.rs", + "@@rules_rust+//crate_universe:src/metadata.rs", + "@@rules_rust+//crate_universe:src/metadata/cargo_bin.rs", + "@@rules_rust+//crate_universe:src/metadata/cargo_tree_resolver.rs", + "@@rules_rust+//crate_universe:src/metadata/cargo_tree_rustc_wrapper.bat", + "@@rules_rust+//crate_universe:src/metadata/cargo_tree_rustc_wrapper.sh", + "@@rules_rust+//crate_universe:src/metadata/dependency.rs", + "@@rules_rust+//crate_universe:src/metadata/metadata_annotation.rs", + "@@rules_rust+//crate_universe:src/rendering.rs", + "@@rules_rust+//crate_universe:src/rendering/template_engine.rs", + "@@rules_rust+//crate_universe:src/rendering/templates/module_bzl.j2", + "@@rules_rust+//crate_universe:src/rendering/templates/partials/header.j2", + "@@rules_rust+//crate_universe:src/rendering/templates/partials/module/aliases_map.j2", + "@@rules_rust+//crate_universe:src/rendering/templates/partials/module/deps_map.j2", + "@@rules_rust+//crate_universe:src/rendering/templates/partials/module/repo_git.j2", + "@@rules_rust+//crate_universe:src/rendering/templates/partials/module/repo_http.j2", + "@@rules_rust+//crate_universe:src/rendering/templates/vendor_module.j2", + "@@rules_rust+//crate_universe:src/rendering/verbatim/alias_rules.bzl", + "@@rules_rust+//crate_universe:src/select.rs", + "@@rules_rust+//crate_universe:src/splicing.rs", + "@@rules_rust+//crate_universe:src/splicing/cargo_config.rs", + "@@rules_rust+//crate_universe:src/splicing/crate_index_lookup.rs", + "@@rules_rust+//crate_universe:src/splicing/splicer.rs", + "@@rules_rust+//crate_universe:src/test.rs", + "@@rules_rust+//crate_universe:src/utils.rs", + "@@rules_rust+//crate_universe:src/utils/starlark.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/glob.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/label.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/select.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/select_dict.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/select_list.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/select_scalar.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/select_set.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/serialize.rs", + "@@rules_rust+//crate_universe:src/utils/starlark/target_compatible_with.rs", + "@@rules_rust+//crate_universe:src/utils/symlink.rs", + "@@rules_rust+//crate_universe:src/utils/target_triple.rs" + ], + "binary": "cargo-bazel", + "cargo_lockfile": "@@rules_rust+//crate_universe:Cargo.lock", + "cargo_toml": "@@rules_rust+//crate_universe:Cargo.toml", + "version": "1.86.0", + "timeout": 900, + "rust_toolchain_cargo_template": "@rust_host_tools//:bin/{tool}", + "rust_toolchain_rustc_template": "@rust_host_tools//:bin/{tool}", + "compressed_windows_toolchain_names": false + } + } + }, + "moduleExtensionMetadata": { + "explicitRootModuleDirectDeps": [ + "cargo_bazel_bootstrap" + ], + "explicitRootModuleDirectDevDeps": [], + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ], + [ + "rules_cc+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_cc+", + "rules_cc", + "rules_cc+" + ], + [ + "rules_rust+", + "bazel_features", + "bazel_features+" + ], + [ + "rules_rust+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_rust+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_rust+", + "cui", + "rules_rust++cu+cui" + ], + [ + "rules_rust+", + "rules_cc", + "rules_cc+" + ], + [ + "rules_rust+", + "rules_rust", + "rules_rust+" + ], + [ + "rules_rust+", + "rules_rust_ctve", + "rules_rust++i2+rules_rust_ctve" + ] + ] + } + }, "@@rules_scala+//scala/extensions:config.bzl%scala_config": { "general": { "bzlTransitiveDigest": "TYEDBdoN7s4wE8er7JwzFt7+3iw57BHsTSLyWmxbgZo=", diff --git a/app/rust-ffi/BUILD.bazel b/app/rust-ffi/BUILD.bazel index 110545378380..321cf0547a09 100644 --- a/app/rust-ffi/BUILD.bazel +++ b/app/rust-ffi/BUILD.bazel @@ -9,7 +9,7 @@ rust_shared_library( name = "rust_lib", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), deps = all_crate_deps(normal = True) + [ "//lib/rust/parser:enso_parser", diff --git a/app/rust-ffi/Cargo.toml b/app/rust-ffi/Cargo.toml index 20cd122d04ee..3602aff87546 100644 --- a/app/rust-ffi/Cargo.toml +++ b/app/rust-ffi/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "rust-ffi" version = "0.1.0" -edition = "2021" +edition = "2024" authors = ["Enso Team "] [lib] diff --git a/app/rust-ffi/src/lib.rs b/app/rust-ffi/src/lib.rs index 9a099a4884fc..55a85e3c8a40 100644 --- a/app/rust-ffi/src/lib.rs +++ b/app/rust-ffi/src/lib.rs @@ -1,7 +1,7 @@ use wasm_bindgen::prelude::*; -use enso_parser::syntax::token::TokenOperatorProperties; use enso_parser::Parser; +use enso_parser::syntax::token::TokenOperatorProperties; thread_local! { pub static PARSER: Parser = Parser::new(); @@ -54,11 +54,7 @@ pub fn self_arg_separator(code: &str) -> i32 { [token] => (token, 1), [] => return -1, }; - if token.operator_properties().is_some() { - right_spacing as i32 - } else { - -1 - } + if token.operator_properties().is_some() { right_spacing as i32 } else { -1 } } #[wasm_bindgen] diff --git a/app/ydoc-shared/src/ast/parse.ts b/app/ydoc-shared/src/ast/parse.ts index 3094b5146382..dcd23d6973bf 100644 --- a/app/ydoc-shared/src/ast/parse.ts +++ b/app/ydoc-shared/src/ast/parse.ts @@ -174,6 +174,10 @@ class Abstractor { node = Assignment.concrete(this.module, docLine, pattern, equals, value) break } + case RawAst.Tree.Type.Call: { + node = this.abstractTree(tree.value).node + break + } case RawAst.Tree.Type.App: { const func = this.abstractExpression(tree.func) const arg = this.abstractExpression(tree.arg) diff --git a/build_tools/base/Cargo.toml b/build_tools/base/Cargo.toml index 06bab2af6a05..1de245394ab3 100644 --- a/build_tools/base/Cargo.toml +++ b/build_tools/base/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-build-base" version = "0.1.0" -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/build_tools/base/src/extensions/future.rs b/build_tools/base/src/extensions/future.rs index c6328c8ce954..0652057c0c8d 100644 --- a/build_tools/base/src/extensions/future.rs +++ b/build_tools/base/src/extensions/future.rs @@ -2,9 +2,9 @@ use crate::prelude::*; -use futures_util::future::MapOk; use futures_util::FutureExt as _; use futures_util::TryFutureExt as _; +use futures_util::future::MapOk; /// Extension methods for [`Future`]. pub trait FutureExt: Future {} @@ -41,7 +41,7 @@ pub trait TryFutureExt: TryFuture { F: FnOnce() -> C + Send + Sync + 'static, C: Display + Send + Sync + 'static, { - self.into_future().map(|res| res.with_context(context)).boxed() + futures_util::TryFutureExt::into_future(self).map(|res| res.with_context(context)).boxed() } } diff --git a/build_tools/base/src/fs.rs b/build_tools/base/src/fs.rs index c4b9f79c2c54..7a42461315a9 100644 --- a/build_tools/base/src/fs.rs +++ b/build_tools/base/src/fs.rs @@ -103,11 +103,7 @@ pub fn remove_file_if_exists(path: impl AsRef) -> Result<()> { #[context("Failed to remove entry {} (if exists)", path.as_ref().display())] pub fn remove_if_exists(path: impl AsRef) -> Result { let path = path.as_ref(); - if path.is_dir() { - remove_dir_if_exists(path) - } else { - remove_file_if_exists(path) - } + if path.is_dir() { remove_dir_if_exists(path) } else { remove_file_if_exists(path) } } /// Recreate directory, so it exists and is empty. diff --git a/build_tools/base/src/lib.rs b/build_tools/base/src/lib.rs index 156608848e03..ca5af22a73b2 100644 --- a/build_tools/base/src/lib.rs +++ b/build_tools/base/src/lib.rs @@ -32,21 +32,21 @@ pub mod prelude { pub use std::fmt::Debug; pub use std::fmt::Display; pub use std::fmt::Formatter; - pub use std::future::ready; pub use std::future::Future; + pub use std::future::ready; pub use std::hash::Hash; pub use std::io::Read; pub use std::io::Seek; - pub use std::iter::once; pub use std::iter::FromIterator; + pub use std::iter::once; pub use std::marker::PhantomData; pub use std::ops::Deref; pub use std::ops::DerefMut; pub use std::ops::Range; pub use std::path::Path; pub use std::path::PathBuf; - pub use std::pin::pin; pub use std::pin::Pin; + pub use std::pin::pin; pub use std::str::FromStr; pub use std::sync::Arc; @@ -59,15 +59,11 @@ pub mod prelude { pub use crate::extensions::pathbuf::PathBufExt as _; pub use crate::extensions::result::ResultExt as _; + pub use anyhow::Context as _; pub use anyhow::anyhow; pub use anyhow::bail; pub use anyhow::ensure; - pub use anyhow::Context as _; pub use fn_error_context::context; - pub use futures_util::future::BoxFuture; - pub use futures_util::select; - pub use futures_util::stream::BoxStream; - pub use futures_util::try_join; pub use futures_util::FutureExt as _; pub use futures_util::Stream; pub use futures_util::StreamExt as _; @@ -75,9 +71,14 @@ pub mod prelude { pub use futures_util::TryFutureExt as _; pub use futures_util::TryStream; pub use futures_util::TryStreamExt as _; - pub use serde::de::DeserializeOwned; + pub use futures_util::future::BoxFuture; + pub use futures_util::select; + pub use futures_util::stream::BoxStream; + pub use futures_util::try_join; pub use serde::Deserialize; pub use serde::Serialize; + pub use serde::de::DeserializeOwned; + pub use tracing::Instrument; pub use tracing::debug; pub use tracing::debug_span; pub use tracing::error; @@ -90,7 +91,6 @@ pub mod prelude { pub use tracing::trace_span; pub use tracing::warn; pub use tracing::warn_span; - pub use tracing::Instrument; /// Get the default value of a type as defined by the `Default` trait. /// diff --git a/build_tools/build/Cargo.toml b/build_tools/build/Cargo.toml index d582be606cab..5e9eae5bd293 100644 --- a/build_tools/build/Cargo.toml +++ b/build_tools/build/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-build" version = "0.1.0" -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/build_tools/build/src/aws/ecr/runtime.rs b/build_tools/build/src/aws/ecr/runtime.rs index f2aa413e3cb6..1e63b09b3995 100644 --- a/build_tools/build/src/aws/ecr/runtime.rs +++ b/build_tools/build/src/aws/ecr/runtime.rs @@ -4,9 +4,9 @@ use crate::prelude::*; use crate::paths::generated; +use ide_ci::programs::Docker; use ide_ci::programs::docker::BuildOptions; use ide_ci::programs::docker::ImageId; -use ide_ci::programs::Docker; /// Name of the ECR repository with Runtime images. pub const NAME: &str = "runtime"; diff --git a/build_tools/build/src/changelog.rs b/build_tools/build/src/changelog.rs index 5cde9f0ff0d6..5766620daaec 100644 --- a/build_tools/build/src/changelog.rs +++ b/build_tools/build/src/changelog.rs @@ -14,7 +14,7 @@ pub mod check; pub struct Changelog<'a>(pub &'a str); impl<'a> Changelog<'a> { - pub fn iterate_headers(&self) -> impl Iterator> + 'a { + pub fn iterate_headers(&self) -> impl Iterator> + 'a + use<'a> { use pulldown_cmark::Options; use pulldown_cmark::Parser; let enable_all_exts = Options::all(); diff --git a/build_tools/build/src/ci_gen.rs b/build_tools/build/src/ci_gen.rs index 021e21c3ac65..ad0afb7c7e67 100644 --- a/build_tools/build/src/ci_gen.rs +++ b/build_tools/build/src/ci_gen.rs @@ -1,25 +1,15 @@ use crate::prelude::*; use crate::ci::input; -use crate::ci_gen::job::prepare_packaging_steps; use crate::ci_gen::job::RunsOn; +use crate::ci_gen::job::prepare_packaging_steps; use crate::engine; use crate::engine::env; -use crate::version::promote::Designation; use crate::version::ENSO_EDITION; use crate::version::ENSO_RELEASE_MODE; use crate::version::ENSO_VERSION; +use crate::version::promote::Designation; -use ide_ci::actions::workflow::definition::checkout_repo_step; -use ide_ci::actions::workflow::definition::get_input_expression; -use ide_ci::actions::workflow::definition::run; -use ide_ci::actions::workflow::definition::setup_artifact_api; -use ide_ci::actions::workflow::definition::setup_bazel; -use ide_ci::actions::workflow::definition::setup_bazel_env; -use ide_ci::actions::workflow::definition::setup_corepack; -use ide_ci::actions::workflow::definition::setup_node; -use ide_ci::actions::workflow::definition::shell; -use ide_ci::actions::workflow::definition::wrap_expression; use ide_ci::actions::workflow::definition::Access; use ide_ci::actions::workflow::definition::Branches; use ide_ci::actions::workflow::definition::Concurrency; @@ -41,6 +31,16 @@ use ide_ci::actions::workflow::definition::WorkflowDispatch; use ide_ci::actions::workflow::definition::WorkflowDispatchInput; use ide_ci::actions::workflow::definition::WorkflowDispatchInputType; use ide_ci::actions::workflow::definition::WorkflowToWrite; +use ide_ci::actions::workflow::definition::checkout_repo_step; +use ide_ci::actions::workflow::definition::get_input_expression; +use ide_ci::actions::workflow::definition::run; +use ide_ci::actions::workflow::definition::setup_artifact_api; +use ide_ci::actions::workflow::definition::setup_bazel; +use ide_ci::actions::workflow::definition::setup_bazel_env; +use ide_ci::actions::workflow::definition::setup_corepack; +use ide_ci::actions::workflow::definition::setup_node; +use ide_ci::actions::workflow::definition::shell; +use ide_ci::actions::workflow::definition::wrap_expression; use ide_ci::cache::goodie::graalvm; // ============== @@ -926,7 +926,10 @@ fn benchmark_workflow( let just_check_input_name = "just-check"; let just_check_input = WorkflowDispatchInput { r#type: WorkflowDispatchInputType::Boolean { default: Some(false) }, - ..WorkflowDispatchInput::new("If set, benchmarks will be only checked to run correctly, not to measure actual performance.", true) + ..WorkflowDispatchInput::new( + "If set, benchmarks will be only checked to run correctly, not to measure actual performance.", + true, + ) }; let bench_name_input_name = "bench-name"; let bench_name_input = WorkflowDispatchInput { diff --git a/build_tools/build/src/ci_gen/job.rs b/build_tools/build/src/ci_gen/job.rs index 9058f7706c04..f9abb368dc3e 100644 --- a/build_tools/build/src/ci_gen/job.rs +++ b/build_tools/build/src/ci_gen/job.rs @@ -1,22 +1,18 @@ use crate::prelude::*; +use crate::ci_gen::RELEASE_CLEANING_POLICY; +use crate::ci_gen::RunStepsBuilder; +use crate::ci_gen::RunnerType; use crate::ci_gen::not_default_branch; use crate::ci_gen::runs_on; use crate::ci_gen::secret; use crate::ci_gen::step; use crate::ci_gen::variables; -use crate::ci_gen::RunStepsBuilder; -use crate::ci_gen::RunnerType; -use crate::ci_gen::RELEASE_CLEANING_POLICY; use crate::engine; use crate::ide; use crate::paths; use core::panic; -use ide_ci::actions::workflow::definition::cancel_workflow_action; -use ide_ci::actions::workflow::definition::checkout_repo_step; -use ide_ci::actions::workflow::definition::shell; -use ide_ci::actions::workflow::definition::step::Argument; use ide_ci::actions::workflow::definition::Access; use ide_ci::actions::workflow::definition::Job; use ide_ci::actions::workflow::definition::JobArchetype; @@ -26,6 +22,10 @@ use ide_ci::actions::workflow::definition::Shell; use ide_ci::actions::workflow::definition::Step; use ide_ci::actions::workflow::definition::Strategy; use ide_ci::actions::workflow::definition::Target; +use ide_ci::actions::workflow::definition::cancel_workflow_action; +use ide_ci::actions::workflow::definition::checkout_repo_step; +use ide_ci::actions::workflow::definition::shell; +use ide_ci::actions::workflow::definition::step::Argument; use ide_ci::cache::goodie::graalvm; use ide_ci::convert_case::ToKebabCase; @@ -620,7 +620,9 @@ fn build_job_ensuring_cloud_tests_run_on_github( ) -> Job { if scope == StandardLibraryTestsScope::CloudRelated { if target.0 != OS::Linux { - panic!("If the Cloud tests are enabled, they require GitHub hosted runner for Cloud auth, so they only run on Linux."); + panic!( + "If the Cloud tests are enabled, they require GitHub hosted runner for Cloud auth, so they only run on Linux." + ); } run_steps_builder.build_job(job_name, RunnerLabel::LinuxLatest) @@ -641,7 +643,9 @@ const GRAAL_EDITION_FOR_EXTRA_TESTS: graalvm::Edition = graalvm::Edition::Commun impl JobArchetype for SnowflakeTests { fn job(&self, target: Target) -> Job { if target.0 != OS::Linux { - panic!("Snowflake tests currently require GitHub hosted runner for Cloud auth, so they only run on Linux."); + panic!( + "Snowflake tests currently require GitHub hosted runner for Cloud auth, so they only run on Linux." + ); } let job_name = "Snowflake Tests"; let job_name = if self.jvm_mode { @@ -823,8 +827,11 @@ impl JobArchetype for DeployRuntime { fn job(&self, target: Target) -> Job { RunStepsBuilder::new("release deploy-runtime") .customize(|step| { - vec![step - .with_secret_exposed_as(secret::CI_PRIVATE_TOKEN, ide_ci::github::GITHUB_TOKEN) + vec![ + step.with_secret_exposed_as( + secret::CI_PRIVATE_TOKEN, + ide_ci::github::GITHUB_TOKEN, + ) .with_env("ENSO_BUILD_ECR_REPOSITORY", crate::aws::ecr::runtime::NAME) .with_secret_exposed_as( secret::ECR_PUSH_RUNTIME_ACCESS_KEY_ID, @@ -834,7 +841,8 @@ impl JobArchetype for DeployRuntime { secret::ECR_PUSH_RUNTIME_SECRET_ACCESS_KEY, "AWS_SECRET_ACCESS_KEY", ) - .with_env("AWS_DEFAULT_REGION", crate::aws::ecr::runtime::REGION)] + .with_env("AWS_DEFAULT_REGION", crate::aws::ecr::runtime::REGION), + ] }) .build_job("Upload Runtime to ECR", target) } @@ -847,8 +855,12 @@ impl JobArchetype for DispatchBuildImage { fn job(&self, target: Target) -> Job { RunStepsBuilder::new("release dispatch-build-image") .customize(|step| { - vec![step - .with_secret_exposed_as(secret::CI_PRIVATE_TOKEN, ide_ci::github::GITHUB_TOKEN)] + vec![ + step.with_secret_exposed_as( + secret::CI_PRIVATE_TOKEN, + ide_ci::github::GITHUB_TOKEN, + ), + ] }) .build_job("Dispatch Cloud build-image workflow", target) } diff --git a/build_tools/build/src/ci_gen/step.rs b/build_tools/build/src/ci_gen/step.rs index a773656dbced..b86441fd4080 100644 --- a/build_tools/build/src/ci_gen/step.rs +++ b/build_tools/build/src/ci_gen/step.rs @@ -4,10 +4,10 @@ use crate::ci_gen::not_a_fork; use crate::engine; use crate::paths; -use ide_ci::actions::workflow::definition::env_expression; use ide_ci::actions::workflow::definition::Shell; use ide_ci::actions::workflow::definition::Step; use ide_ci::actions::workflow::definition::Target; +use ide_ci::actions::workflow::definition::env_expression; use ide_ci::cache::goodie::graalvm; pub fn test_reporter( diff --git a/build_tools/build/src/cloud_tests/mod.rs b/build_tools/build/src/cloud_tests/mod.rs index 25a131a7d4fc..8340d24c352b 100644 --- a/build_tools/build/src/cloud_tests/mod.rs +++ b/build_tools/build/src/cloud_tests/mod.rs @@ -54,7 +54,9 @@ struct Credentials { async fn build_credentials(config: AuthConfig) -> Result { if !is_aws_cli_installed().await { - return Err(anyhow!("AWS CLI is not installed. If you want the build script to generate the Enso Cloud credentials file, you must install the AWS CLI.")); + return Err(anyhow!( + "AWS CLI is not installed. If you want the build script to generate the Enso Cloud credentials file, you must install the AWS CLI." + )); } // We save the timestamp before the authentication, as it's better to say the token expires a diff --git a/build_tools/build/src/context.rs b/build_tools/build/src/context.rs index 4eacef52797f..9796a5246aa7 100644 --- a/build_tools/build/src/context.rs +++ b/build_tools/build/src/context.rs @@ -3,8 +3,8 @@ use crate::prelude::*; use crate::paths::TargetTriple; use ide_ci::github; -use octocrab::models::repos::Release; use octocrab::models::ReleaseId; +use octocrab::models::repos::Release; /// The basic, common information available in this application. #[derive(Clone, Debug, derive_more::Deref)] diff --git a/build_tools/build/src/engine.rs b/build_tools/build/src/engine.rs index c9adc95c0010..01a96b930368 100644 --- a/build_tools/build/src/engine.rs +++ b/build_tools/build/src/engine.rs @@ -222,10 +222,10 @@ where pub fn allow(&mut self, item: T) { match self { - Self::Whitelist(ref mut set) => { + Self::Whitelist(set) => { set.insert(item); } - Self::Blacklist(ref mut set) => { + Self::Blacklist(set) => { set.remove(&item); } } @@ -233,10 +233,10 @@ where pub fn deny(&mut self, item: T) { match self { - Self::Whitelist(ref mut set) => { + Self::Whitelist(set) => { set.remove(&item); } - Self::Blacklist(ref mut set) => { + Self::Blacklist(set) => { set.insert(item); } } diff --git a/build_tools/build/src/engine/context.rs b/build_tools/build/src/engine/context.rs index 8a0e1232f48e..751669b6d73f 100644 --- a/build_tools/build/src/engine/context.rs +++ b/build_tools/build/src/engine/context.rs @@ -1,30 +1,30 @@ use crate::prelude::*; use crate::engine; -use crate::engine::env; -use crate::engine::sbt::SbtCommandProvider; use crate::engine::BenchmarkType; use crate::engine::BuildConfigurationResolved; use crate::engine::BuiltArtifacts; use crate::engine::Operation; +use crate::engine::PARALLEL_ENSO_TESTS; use crate::engine::ReleaseCommand; use crate::engine::ReleaseOperation; -use crate::engine::PARALLEL_ENSO_TESTS; +use crate::engine::env; +use crate::engine::sbt::SbtCommandProvider; use crate::enso::BenchmarkOptions; use crate::enso::BuiltEnso; use crate::enso::IrCaches; -use crate::paths::cache_directory; +use crate::paths::ENSO_TEST_JUNIT_DIR; use crate::paths::Paths; use crate::paths::TargetTriple; -use crate::paths::ENSO_TEST_JUNIT_DIR; +use crate::paths::cache_directory; use crate::project::ProcessWrapper; use ide_ci::actions::workflow::is_in_env; use ide_ci::cache; use ide_ci::github::release::IsReleaseExt; use ide_ci::platform::DEFAULT_SHELL; -use ide_ci::programs::sbt; use ide_ci::programs::Sbt; +use ide_ci::programs::sbt; use std::env::consts::DLL_EXTENSION; use std::env::consts::EXE_EXTENSION; @@ -650,11 +650,7 @@ impl RunContext { fn short_path(&self, full: &Path) -> PathBuf { let strip = full.strip_prefix(self.repo_root.path.clone()); - if let Ok(relative) = strip { - relative.to_path_buf() - } else { - full.to_path_buf() - } + if let Ok(relative) = strip { relative.to_path_buf() } else { full.to_path_buf() } } } diff --git a/build_tools/build/src/engine/sbt.rs b/build_tools/build/src/engine/sbt.rs index 8ac76210637a..bae92e817581 100644 --- a/build_tools/build/src/engine/sbt.rs +++ b/build_tools/build/src/engine/sbt.rs @@ -3,8 +3,8 @@ use crate::prelude::*; use ide_ci::program::command::provider::CommandProviderExt; -use ide_ci::programs::sbt; use ide_ci::programs::Sbt; +use ide_ci::programs::sbt; pub fn verify_generated_package_task(package: &str, path: impl AsRef) -> String { format!( diff --git a/build_tools/build/src/enso.rs b/build_tools/build/src/enso.rs index f239fbbbde6b..1e55cd038159 100644 --- a/build_tools/build/src/enso.rs +++ b/build_tools/build/src/enso.rs @@ -2,11 +2,11 @@ use crate::prelude::*; use crate::cloud_tests; use crate::engine::StandardLibraryTestsSelection; -use crate::paths::Paths; use crate::paths::ENSO_ENABLE_ASSERTIONS; use crate::paths::ENSO_META_TEST_ARGS; use crate::paths::ENSO_META_TEST_COMMAND; use crate::paths::ENSO_TEST_ANSI_COLORS; +use crate::paths::Paths; use crate::postgres; use crate::postgres::EndpointConfiguration as PostgresEndpointConfiguration; use crate::postgres::Postgresql; @@ -26,11 +26,7 @@ pub enum Boolean { impl From for Boolean { fn from(value: bool) -> Self { - if value { - Self::True - } else { - Self::False - } + if value { Self::True } else { Self::False } } } @@ -216,7 +212,10 @@ impl BuiltEnso { Some(file) } Err(err) => { - info!("Enso Cloud authentication (for cloud integration tests) is skipped, because of: {}", err); + info!( + "Enso Cloud authentication (for cloud integration tests) is skipped, because of: {}", + err + ); None } }; diff --git a/build_tools/build/src/ide/web.rs b/build_tools/build/src/ide/web.rs index 9b309149798b..1d378b20a9a3 100644 --- a/build_tools/build/src/ide/web.rs +++ b/build_tools/build/src/ide/web.rs @@ -10,8 +10,8 @@ use anyhow::Context; use ide_ci::env::known::electron_builder::WindowsSigningCredentials; use ide_ci::program::command::FallibleManipulator; use ide_ci::program::command::Manipulator; -use ide_ci::programs::node::PnpmCommand; use ide_ci::programs::Pnpm; +use ide_ci::programs::node::PnpmCommand; use sha2::Digest; use std::process::Stdio; diff --git a/build_tools/build/src/postgres.rs b/build_tools/build/src/postgres.rs index 8dd6cfc0f408..ba044011245e 100644 --- a/build_tools/build/src/postgres.rs +++ b/build_tools/build/src/postgres.rs @@ -3,11 +3,11 @@ use crate::prelude::*; use ide_ci::env::accessor::RawVariable; use ide_ci::env::accessor::TypedVariable; use ide_ci::get_free_port; +use ide_ci::programs::Docker; use ide_ci::programs::docker::ContainerId; use ide_ci::programs::docker::ImageId; use ide_ci::programs::docker::Network; use ide_ci::programs::docker::RunOptions; -use ide_ci::programs::Docker; use std::process::Stdio; use tokio::io::AsyncBufReadExt; use tokio::io::AsyncRead; @@ -50,19 +50,22 @@ pub enum EndpointConfiguration { impl EndpointConfiguration { /// Tries to deduce what endpoint should be used for a spawned Postgres service. pub fn deduce() -> Result { - if let Ok(container_name) = crate::env::ENSO_RUNNER_CONTAINER_NAME.get() { - debug!("Assuming that I am in the Docker container named {container_name}."); - Ok(Self::Container { owner: container_name }) - } else { - // If we are running on the bare machine (i.e. not in container), we spawn postgres - // and expose it on a free host port. Then we can directly consume. - let port = if port_check::is_local_port_free(POSTGRES_CONTAINER_DEFAULT_PORT) { - // Prefer the usual port. - POSTGRES_CONTAINER_DEFAULT_PORT - } else { - get_free_port()? - }; - Ok(Self::Host { port }) + match crate::env::ENSO_RUNNER_CONTAINER_NAME.get() { + Ok(container_name) => { + debug!("Assuming that I am in the Docker container named {container_name}."); + Ok(Self::Container { owner: container_name }) + } + _ => { + // If we are running on the bare machine (i.e. not in container), we spawn postgres + // and expose it on a free host port. Then we can directly consume. + let port = if port_check::is_local_port_free(POSTGRES_CONTAINER_DEFAULT_PORT) { + // Prefer the usual port. + POSTGRES_CONTAINER_DEFAULT_PORT + } else { + get_free_port()? + }; + Ok(Self::Host { port }) + } } } } @@ -147,13 +150,16 @@ impl Drop for PostgresContainer { debug!("Will remove the postgres container"); let cleanup_future = self.config.cleanup(); - if let Err(e) = futures::executor::block_on(cleanup_future) { - debug!( - "Failed to kill the Postgres container named {}: {}", - self.config.postgres_container, e - ); - } else { - debug!("Postgres container killed."); + match futures::executor::block_on(cleanup_future) { + Err(e) => { + debug!( + "Failed to kill the Postgres container named {}: {}", + self.config.postgres_container, e + ); + } + _ => { + debug!("Postgres container killed."); + } } } } diff --git a/build_tools/build/src/project.rs b/build_tools/build/src/project.rs index 24d455980783..d5525a649498 100644 --- a/build_tools/build/src/project.rs +++ b/build_tools/build/src/project.rs @@ -89,7 +89,7 @@ pub struct Context { impl Context { /// Get a `git` program handle for the repository. - pub fn git(&self) -> impl Future> + 'static { + pub fn git(&self) -> impl Future> + 'static + use<> { let root = self.repo_root.to_path_buf(); git::new(root) } diff --git a/build_tools/build/src/project/gui.rs b/build_tools/build/src/project/gui.rs index 476f6d8f3241..a6ed0bc034ce 100644 --- a/build_tools/build/src/project/gui.rs +++ b/build_tools/build/src/project/gui.rs @@ -4,8 +4,8 @@ use crate::prelude::*; -use crate::ide::web::env as ide_env; use crate::ide::web::IdeDesktop; +use crate::ide::web::env as ide_env; use crate::paths::generated::RepoRootAppGuiDist; use crate::paths::generated::RepoRootDistGuiAssets; use crate::project::Context; diff --git a/build_tools/build/src/project/ide.rs b/build_tools/build/src/project/ide.rs index 408ddd822d29..6f6d0fb3c00f 100644 --- a/build_tools/build/src/project/ide.rs +++ b/build_tools/build/src/project/ide.rs @@ -1,8 +1,8 @@ #[allow(unused_imports)] use crate::prelude::*; -use crate::project::gui::ide_desktop_from_context; use crate::project::Context; +use crate::project::gui::ide_desktop_from_context; #[derive(Clone, Debug)] pub struct Artifact { diff --git a/build_tools/build/src/project/runtime.rs b/build_tools/build/src/project/runtime.rs index 6f84f026c698..ad62d31b13c0 100644 --- a/build_tools/build/src/project/runtime.rs +++ b/build_tools/build/src/project/runtime.rs @@ -2,10 +2,10 @@ use crate::prelude::*; -use crate::engine::package::IsPackage; use crate::engine::BuildConfigurationFlags; -use crate::paths::generated::EnginePackage; +use crate::engine::package::IsPackage; use crate::paths::TargetTriple; +use crate::paths::generated::EnginePackage; use crate::project::Context; use crate::project::IsArtifact; use crate::project::IsTarget; diff --git a/build_tools/build/src/release.rs b/build_tools/build/src/release.rs index c2381c1e9439..070b0430ce2f 100644 --- a/build_tools/build/src/release.rs +++ b/build_tools/build/src/release.rs @@ -5,12 +5,12 @@ use crate::prelude::*; use crate::changelog::Changelog; use crate::context::BuildContext; use crate::env::ENSO_ADMIN_TOKEN; -use crate::paths::generated; use crate::paths::TargetTriple; +use crate::paths::generated; use crate::project; use crate::version; -use crate::version::promote::Designation; use crate::version::Versions; +use crate::version::promote::Designation; use ide_ci::github; use ide_ci::io::web::handle_error_response; diff --git a/build_tools/build/src/rust/enso_linter.rs b/build_tools/build/src/rust/enso_linter.rs index 83b69f4eebf5..fd4df954871f 100644 --- a/build_tools/build/src/rust/enso_linter.rs +++ b/build_tools/build/src/rust/enso_linter.rs @@ -2,8 +2,8 @@ use super::*; use crate::paths::generated::RepoRoot; -use ide_ci::programs::cargo; use ide_ci::programs::Cargo; +use ide_ci::programs::cargo; const LINTER_CRATE_NAME: &str = "enso-parser-debug"; const LINTER_BIN_NAME: &str = "check_syntax"; diff --git a/build_tools/build/src/rust/parser.rs b/build_tools/build/src/rust/parser.rs index c2df25737ff1..88729ba45728 100644 --- a/build_tools/build/src/rust/parser.rs +++ b/build_tools/build/src/rust/parser.rs @@ -2,12 +2,12 @@ use super::*; use crate::paths::generated::RepoRoot; -use ide_ci::programs::cargo; -use ide_ci::programs::java; -use ide_ci::programs::javac; use ide_ci::programs::Cargo; use ide_ci::programs::Java; use ide_ci::programs::Javac; +use ide_ci::programs::cargo; +use ide_ci::programs::java; +use ide_ci::programs::javac; use std::fs; use std::path::Path; diff --git a/build_tools/build/src/sqlserver.rs b/build_tools/build/src/sqlserver.rs index 83a1def9ad7d..5df5a5aab9bd 100644 --- a/build_tools/build/src/sqlserver.rs +++ b/build_tools/build/src/sqlserver.rs @@ -3,11 +3,11 @@ use crate::prelude::*; use ide_ci::env::accessor::RawVariable; use ide_ci::env::accessor::TypedVariable; use ide_ci::get_free_port; +use ide_ci::programs::Docker; use ide_ci::programs::docker::ContainerId; use ide_ci::programs::docker::ImageId; use ide_ci::programs::docker::Network; use ide_ci::programs::docker::RunOptions; -use ide_ci::programs::Docker; use std::process::Stdio; use tokio::io::AsyncBufReadExt; use tokio::io::AsyncRead; @@ -50,19 +50,22 @@ pub enum EndpointConfiguration { impl EndpointConfiguration { /// Tries to deduce what endpoint should be used for a spawned SQLServer service. pub fn deduce() -> Result { - if let Ok(container_name) = crate::env::ENSO_RUNNER_CONTAINER_NAME.get() { - debug!("Assuming that I am in the Docker container named {container_name}."); - Ok(Self::Container { owner: container_name }) - } else { - // If we are running on the bare machine (i.e. not in container), we spawn SQLServer - // and expose it on a free host port. Then we can directly consume. - let port = if port_check::is_local_port_free(SQLSERVER_CONTAINER_DEFAULT_PORT) { - // Prefer the usual port. - SQLSERVER_CONTAINER_DEFAULT_PORT - } else { - get_free_port()? - }; - Ok(Self::Host { port }) + match crate::env::ENSO_RUNNER_CONTAINER_NAME.get() { + Ok(container_name) => { + debug!("Assuming that I am in the Docker container named {container_name}."); + Ok(Self::Container { owner: container_name }) + } + _ => { + // If we are running on the bare machine (i.e. not in container), we spawn SQLServer + // and expose it on a free host port. Then we can directly consume. + let port = if port_check::is_local_port_free(SQLSERVER_CONTAINER_DEFAULT_PORT) { + // Prefer the usual port. + SQLSERVER_CONTAINER_DEFAULT_PORT + } else { + get_free_port()? + }; + Ok(Self::Host { port }) + } } } } diff --git a/build_tools/build/src/web.rs b/build_tools/build/src/web.rs index 3ae3cfa09df3..6361c07aa70f 100644 --- a/build_tools/build/src/web.rs +++ b/build_tools/build/src/web.rs @@ -38,7 +38,7 @@ pub fn install(repo_root: impl AsRef) -> BoxFuture<'static, Result> { } /// Run `pnpm install` in the given directory. -fn install_internal_run(path: &Path) -> impl Future + 'static { +fn install_internal_run(path: &Path) -> impl Future + 'static + use<> { Pnpm.cmd().and_then_async(move |cmd| { let err = format!("Failed to install NPM dependencies in {}.", path.display()); cmd.with_current_dir(path).install().run_ok().context(err) diff --git a/build_tools/ci-gen/Cargo.toml b/build_tools/ci-gen/Cargo.toml index 28a2ea9a02f5..10ec5e9e8b3f 100644 --- a/build_tools/ci-gen/Cargo.toml +++ b/build_tools/ci-gen/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-build-ci-gen" version = "0.1.0" -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/build_tools/ci_utils/Cargo.toml b/build_tools/ci_utils/Cargo.toml index dc4d73ce2b17..d1dd68bc5c51 100644 --- a/build_tools/ci_utils/Cargo.toml +++ b/build_tools/ci_utils/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ide-ci" version = "0.1.0" -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/build_tools/ci_utils/src/actions/artifacts.rs b/build_tools/ci_utils/src/actions/artifacts.rs index ac98dfcf3362..487a21c1a7a4 100644 --- a/build_tools/ci_utils/src/actions/artifacts.rs +++ b/build_tools/ci_utils/src/actions/artifacts.rs @@ -161,10 +161,10 @@ mod tests { use super::*; use crate::actions::artifacts::models::CreateArtifactResponse; use reqwest::StatusCode; - use wiremock::matchers::method; use wiremock::Mock; use wiremock::MockServer; use wiremock::ResponseTemplate; + use wiremock::matchers::method; #[tokio::test(flavor = "multi_thread", worker_threads = 4)] #[ignore] diff --git a/build_tools/ci_utils/src/actions/artifacts/context.rs b/build_tools/ci_utils/src/actions/artifacts/context.rs index c928b8ad2925..71a09c479b3f 100644 --- a/build_tools/ci_utils/src/actions/artifacts/context.rs +++ b/build_tools/ci_utils/src/actions/artifacts/context.rs @@ -5,11 +5,11 @@ use crate::env::expect_var; use crate::extensions::reqwest::ClientBuilderExt; use mime::Mime; -use reqwest::header::HeaderMap; -use reqwest::header::HeaderValue; -use reqwest::header::ACCEPT_ENCODING; use reqwest::Client; use reqwest::ClientBuilder; +use reqwest::header::ACCEPT_ENCODING; +use reqwest::header::HeaderMap; +use reqwest::header::HeaderValue; #[derive(Clone, Debug)] pub struct Context { diff --git a/build_tools/ci_utils/src/actions/artifacts/download.rs b/build_tools/ci_utils/src/actions/artifacts/download.rs index c2ec9fae68b7..c6d1efdfcf46 100644 --- a/build_tools/ci_utils/src/actions/artifacts/download.rs +++ b/build_tools/ci_utils/src/actions/artifacts/download.rs @@ -1,15 +1,15 @@ use crate::prelude::*; +use crate::actions::artifacts::API_VERSION; use crate::actions::artifacts::models::ArtifactResponse; use crate::actions::artifacts::models::ContainerEntry; use crate::actions::artifacts::models::ItemType; use crate::actions::artifacts::run_session::SessionClient; -use crate::actions::artifacts::API_VERSION; -use reqwest::header::HeaderMap; -use reqwest::header::HeaderValue; use reqwest::header::ACCEPT; use reqwest::header::ACCEPT_ENCODING; +use reqwest::header::HeaderMap; +use reqwest::header::HeaderValue; use tokio::fs::create_dir_all; #[derive(Clone, Debug)] diff --git a/build_tools/ci_utils/src/actions/artifacts/raw.rs b/build_tools/ci_utils/src/actions/artifacts/raw.rs index 13f3d26c00fe..558dafe8e1b2 100644 --- a/build_tools/ci_utils/src/actions/artifacts/raw.rs +++ b/build_tools/ci_utils/src/actions/artifacts/raw.rs @@ -11,10 +11,10 @@ use crate::reqwest::ContentRange; use anyhow::Context; use bytes::BytesMut; -use reqwest::header::HeaderMap; use reqwest::Body; use reqwest::Response; use reqwest::StatusCode; +use reqwest::header::HeaderMap; use tokio::io::AsyncReadExt; pub mod endpoints { diff --git a/build_tools/ci_utils/src/actions/workflow.rs b/build_tools/ci_utils/src/actions/workflow.rs index bfbf826687e7..f6e471f9d191 100644 --- a/build_tools/ci_utils/src/actions/workflow.rs +++ b/build_tools/ci_utils/src/actions/workflow.rs @@ -24,7 +24,9 @@ pub async fn set_output(name: &str, value: &(impl ToString + ?Sized)) -> Result debug!("Setting GitHub Actions step output {name} to {value}."); env_file::GITHUB_OUTPUT.append_key_value(name, &value).await?; } else { - debug!("Not setting GitHub Actions step output {name} to {value} because we are not in GitHub Actions environment."); + debug!( + "Not setting GitHub Actions step output {name} to {value} because we are not in GitHub Actions environment." + ); } Ok(()) } diff --git a/build_tools/ci_utils/src/actions/workflow/definition.rs b/build_tools/ci_utils/src/actions/workflow/definition.rs index 4f255a132d5e..65b596c1078b 100644 --- a/build_tools/ci_utils/src/actions/workflow/definition.rs +++ b/build_tools/ci_utils/src/actions/workflow/definition.rs @@ -6,8 +6,8 @@ use crate::convert_case::ToKebabCase; use crate::env::accessor::RawVariable; use serde_yaml::Value; -use std::collections::btree_map::Entry; use std::collections::BTreeMap; +use std::collections::btree_map::Entry; use std::sync::atomic::AtomicU64; use std::sync::atomic::Ordering; diff --git a/build_tools/ci_utils/src/archive.rs b/build_tools/ci_utils/src/archive.rs index b450837a500b..9aeb8057fd52 100644 --- a/build_tools/ci_utils/src/archive.rs +++ b/build_tools/ci_utils/src/archive.rs @@ -1,9 +1,9 @@ use crate::prelude::*; use crate::fs::create_dir_if_missing; +use crate::programs::SevenZip; use crate::programs::tar::Compression; use crate::programs::tar::Tar; -use crate::programs::SevenZip; use tracing::Span; @@ -42,7 +42,10 @@ impl Format { if secondary_extension == Some(OsStr::new("tar")) { Ok(Format::Tar(Some(compression))) } else { - bail!("Extension `.{}` looks like a tar compression, but there is no `.tar.` component in the name", other) + bail!( + "Extension `.{}` looks like a tar compression, but there is no `.tar.` component in the name", + other + ) } } else { bail!("Unrecognized archive extension `{}`.", other) diff --git a/build_tools/ci_utils/src/cache.rs b/build_tools/ci_utils/src/cache.rs index c6e4eeacb439..868022ee8395 100644 --- a/build_tools/ci_utils/src/cache.rs +++ b/build_tools/ci_utils/src/cache.rs @@ -188,7 +188,9 @@ mod tests { #[ignore] async fn cache_test() -> Result { setup_logging().ok(); - let download_task = DownloadFile::new("https://store.akamai.steamstatic.com/public/shared/images/header/logo_steam.svg?t=962016")?; + let download_task = DownloadFile::new( + "https://store.akamai.steamstatic.com/public/shared/images/header/logo_steam.svg?t=962016", + )?; let cache = Cache::new("C:/temp/enso-cache").await?; cache.get(download_task).await?; diff --git a/build_tools/ci_utils/src/cache/goodie/flatc.rs b/build_tools/ci_utils/src/cache/goodie/flatc.rs index f892fe41c318..348080f0fde2 100644 --- a/build_tools/ci_utils/src/cache/goodie/flatc.rs +++ b/build_tools/ci_utils/src/cache/goodie/flatc.rs @@ -1,9 +1,9 @@ use crate::prelude::*; -use crate::cache::goodie; use crate::cache::Cache; -use crate::env::known::PATH; +use crate::cache::goodie; use crate::env::Modification; +use crate::env::known::PATH; use crate::github::RepoRef; /// The repository of the FlatBuffers project. diff --git a/build_tools/ci_utils/src/cache/goodie/graalpy.rs b/build_tools/ci_utils/src/cache/goodie/graalpy.rs index 93aeeec97f7d..4c1584883ded 100644 --- a/build_tools/ci_utils/src/cache/goodie/graalpy.rs +++ b/build_tools/ci_utils/src/cache/goodie/graalpy.rs @@ -1,7 +1,7 @@ use crate::prelude::*; -use crate::cache::goodie; use crate::cache::Cache; +use crate::cache::goodie; use crate::env::known::PATH; use crate::github::RepoRef; use crate::programs::graalpy::GraalPy as GraalPyProgram; @@ -92,10 +92,10 @@ impl GraalPy { #[cfg(test)] mod tests { - use crate::cache::goodie::graalpy::graalpy_version_from_str; - use crate::cache::goodie::graalpy::GraalPy; use crate::Arch; use crate::OS; + use crate::cache::goodie::graalpy::GraalPy; + use crate::cache::goodie::graalpy::graalpy_version_from_str; use octocrab::Octocrab; use semver::Version; diff --git a/build_tools/ci_utils/src/cache/goodie/graalvm.rs b/build_tools/ci_utils/src/cache/goodie/graalvm.rs index 336013a6b9bb..f29fd268a291 100644 --- a/build_tools/ci_utils/src/cache/goodie/graalvm.rs +++ b/build_tools/ci_utils/src/cache/goodie/graalvm.rs @@ -1,11 +1,11 @@ use crate::prelude::*; -use crate::cache::goodie; use crate::cache::Cache; +use crate::cache::goodie; use crate::env::known::PATH; use crate::github::RepoRef; -use crate::programs::java::JAVA_HOME; use crate::programs::Java; +use crate::programs::java::JAVA_HOME; const PACKAGE_PREFIX_URL: &str = "graalvm-community"; @@ -278,7 +278,10 @@ Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 21.0.2+13.1 (build 21.0.2+13-LT arch: Arch::X86_64, }; let url = graalvm.url().await.unwrap(); - assert_eq!(url.to_string(), "https://download.oracle.com/graalvm/21/archive/graalvm-jdk-21.0.2_linux-x64_bin.tar.gz"); + assert_eq!( + url.to_string(), + "https://download.oracle.com/graalvm/21/archive/graalvm-jdk-21.0.2_linux-x64_bin.tar.gz" + ); } #[tokio::test] @@ -291,7 +294,10 @@ Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 21.0.2+13.1 (build 21.0.2+13-LT arch: Arch::X86_64, }; let url = graalvm.url().await.unwrap(); - assert_eq!(url.to_string(), "https://download.oracle.com/graalvm/17/archive/graalvm-jdk-17.0.7_linux-x64_bin.tar.gz"); + assert_eq!( + url.to_string(), + "https://download.oracle.com/graalvm/17/archive/graalvm-jdk-17.0.7_linux-x64_bin.tar.gz" + ); } #[tokio::test] @@ -304,6 +310,9 @@ Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 21.0.2+13.1 (build 21.0.2+13-LT arch: Arch::X86_64, }; let url = graalvm.url().await.unwrap(); - assert_eq!(url.to_string(), "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-21.0.2/graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz"); + assert_eq!( + url.to_string(), + "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-21.0.2/graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz" + ); } } diff --git a/build_tools/ci_utils/src/cache/goodie/sbt.rs b/build_tools/ci_utils/src/cache/goodie/sbt.rs index 2df3f1d29559..e27556b89e87 100644 --- a/build_tools/ci_utils/src/cache/goodie/sbt.rs +++ b/build_tools/ci_utils/src/cache/goodie/sbt.rs @@ -1,7 +1,7 @@ use crate::prelude::*; -use crate::cache::goodie; use crate::cache::Cache; +use crate::cache::goodie; use crate::env::known::PATH; use crate::programs; diff --git a/build_tools/ci_utils/src/deploy/runner.rs b/build_tools/ci_utils/src/deploy/runner.rs index f89bc27ed644..027f5382e9af 100644 --- a/build_tools/ci_utils/src/deploy/runner.rs +++ b/build_tools/ci_utils/src/deploy/runner.rs @@ -109,9 +109,5 @@ impl Config { /// The extension used by the scripts that are part of GitHub Actions Runner distribution. pub fn script_extension(os: OS) -> &'static str { - if os == OS::Windows { - "cmd" - } else { - "sh" - } + if os == OS::Windows { "cmd" } else { "sh" } } diff --git a/build_tools/ci_utils/src/env.rs b/build_tools/ci_utils/src/env.rs index 01c5f7b23ae8..9bea07353e51 100644 --- a/build_tools/ci_utils/src/env.rs +++ b/build_tools/ci_utils/src/env.rs @@ -51,13 +51,21 @@ pub fn set_var, V: AsRef>(key: K, value: V) { key.as_ref().as_str(), value.as_ref().as_str() ); - std::env::set_var(key, value) + // See API docs, this is safe on Windows but inherently unsafe on other operating systems. + #[allow(unsafe_code)] + unsafe { + std::env::set_var(key, value) + } } /// Like [`std::env::remove_var`], but with log. pub fn remove_var>(key: K) { debug!("Removing environment variable {}.", key.as_ref().as_str()); - std::env::remove_var(key) + // See API docs, this is safe on Windows but inherently unsafe on other operating systems. + #[allow(unsafe_code)] + unsafe { + std::env::remove_var(key) + } } /// Define typed accessors for environment variables. Supported types include `String`, `PathBuf`, diff --git a/build_tools/ci_utils/src/env/accessor.rs b/build_tools/ci_utils/src/env/accessor.rs index 8025bcb3987b..f8822b230593 100644 --- a/build_tools/ci_utils/src/env/accessor.rs +++ b/build_tools/ci_utils/src/env/accessor.rs @@ -38,7 +38,11 @@ pub trait RawVariable { /// Remove (i.e. unset) this variable. fn remove(&self) { - std::env::remove_var(self.name()); + // See API docs, this is safe on Windows but inherently unsafe on other operating systems. + #[allow(unsafe_code)] + unsafe { + std::env::remove_var(self.name()); + } } } diff --git a/build_tools/ci_utils/src/extensions/reqwest.rs b/build_tools/ci_utils/src/extensions/reqwest.rs index 3f333b2fd6ea..0a3201190fde 100644 --- a/build_tools/ci_utils/src/extensions/reqwest.rs +++ b/build_tools/ci_utils/src/extensions/reqwest.rs @@ -1,11 +1,11 @@ use crate::prelude::*; use mime::Mime; +use reqwest::header::CONNECTION; +use reqwest::header::CONTENT_TYPE; use reqwest::header::HeaderMap; use reqwest::header::HeaderName; use reqwest::header::HeaderValue; -use reqwest::header::CONNECTION; -use reqwest::header::CONTENT_TYPE; pub trait ClientBuilderExt: Sized { fn default_content_type(self, mime_type: Mime) -> Self; diff --git a/build_tools/ci_utils/src/extensions/version.rs b/build_tools/ci_utils/src/extensions/version.rs index eacbbcf8d422..b1716587e0e6 100644 --- a/build_tools/ci_utils/src/extensions/version.rs +++ b/build_tools/ci_utils/src/extensions/version.rs @@ -63,11 +63,7 @@ pub trait PrereleaseExt { impl PrereleaseExt for Prerelease { fn identifiers(&self) -> Vec<&str> { - if self.is_empty() { - default() - } else { - self.split('.').collect() - } + if self.is_empty() { default() } else { self.split('.').collect() } } } diff --git a/build_tools/ci_utils/src/github/release.rs b/build_tools/ci_utils/src/github/release.rs index d77edca692e4..5e5ec3f0eef4 100644 --- a/build_tools/ci_utils/src/github/release.rs +++ b/build_tools/ci_utils/src/github/release.rs @@ -5,9 +5,9 @@ use crate::prelude::*; use crate::github::Repo; use mime::Mime; +use octocrab::models::ReleaseId; use octocrab::models::repos::Asset; use octocrab::models::repos::Release; -use octocrab::models::ReleaseId; use reqwest::Body; use tracing::instrument; diff --git a/build_tools/ci_utils/src/github/repo.rs b/build_tools/ci_utils/src/github/repo.rs index 3bcc77222799..cd720a2c4a2a 100644 --- a/build_tools/ci_utils/src/github/repo.rs +++ b/build_tools/ci_utils/src/github/repo.rs @@ -4,19 +4,19 @@ use crate::prelude::*; use crate::cache::download::DownloadFile; use crate::github; -use crate::github::model; use crate::github::MAX_PER_PAGE; +use crate::github::model; use headers::HeaderMap; use headers::HeaderValue; -use octocrab::models::repos::Asset; -use octocrab::models::repos::Ref; -use octocrab::models::repos::Release; -use octocrab::models::workflows::WorkflowListArtifact; use octocrab::models::ArtifactId; use octocrab::models::AssetId; use octocrab::models::ReleaseId; use octocrab::models::RunId; +use octocrab::models::repos::Asset; +use octocrab::models::repos::Ref; +use octocrab::models::repos::Release; +use octocrab::models::workflows::WorkflowListArtifact; use octocrab::params::actions::ArchiveFormat; use octocrab::params::repos::Reference; use reqwest::Response; @@ -113,7 +113,11 @@ impl<'a> TryFrom<&'a str> for RepoRef<'a> { fn try_from(value: &'a str) -> std::result::Result { match value.split('/').collect_vec().as_slice() { [owner, name] => Ok(Self { owner, name }), - slice => bail!("Failed to parse string '{}': Splitting by '/' should yield exactly 2 pieces, found: {}", value, slice.len()), + slice => bail!( + "Failed to parse string '{}': Splitting by '/' should yield exactly 2 pieces, found: {}", + value, + slice.len() + ), } } } diff --git a/build_tools/ci_utils/src/global.rs b/build_tools/ci_utils/src/global.rs index 4da8dff0d66a..a0171d3df299 100644 --- a/build_tools/ci_utils/src/global.rs +++ b/build_tools/ci_utils/src/global.rs @@ -27,11 +27,7 @@ impl GlobalState { pub fn tick(&mut self) { let mut to_remove = vec![]; for (index, bar) in self.bars.iter().enumerate() { - if let Some(bar) = bar.upgrade() { - bar.tick() - } else { - to_remove.push(index) - } + if let Some(bar) = bar.upgrade() { bar.tick() } else { to_remove.push(index) } } for to_remove in to_remove.iter().rev() { diff --git a/build_tools/ci_utils/src/io.rs b/build_tools/ci_utils/src/io.rs index c8ec1f07b945..0c1c766189bc 100644 --- a/build_tools/ci_utils/src/io.rs +++ b/build_tools/ci_utils/src/io.rs @@ -21,11 +21,6 @@ pub async fn read_length(mut read: impl AsyncRead + Unpin) -> Result { Ok(tokio::io::copy(&mut read, &mut sink).await?) } -/// Get the the response body as a byte stream. -pub async fn download(url: impl IntoUrl) -> Result>> { - client::download(&default(), url).await -} - pub async fn download_to_dir(url: impl IntoUrl, dir: impl AsRef) -> Result { let url = url.into_url()?; let response = client::get(&default(), url.clone()).await?; @@ -138,11 +133,13 @@ mod tests { mirror_directory(foo.parent().unwrap(), foo.parent().unwrap().with_file_name("dest2")) .await?; - assert!(tokio::process::Command::new(r"C:\msys64\usr\bin\ls.exe") - .arg("-laR") - .status() - .await? - .success()); + assert!( + tokio::process::Command::new(r"C:\msys64\usr\bin\ls.exe") + .arg("-laR") + .status() + .await? + .success() + ); Ok(()) } diff --git a/build_tools/ci_utils/src/lib.rs b/build_tools/ci_utils/src/lib.rs index d93506ebeb2b..568a2a01c11c 100644 --- a/build_tools/ci_utils/src/lib.rs +++ b/build_tools/ci_utils/src/lib.rs @@ -59,13 +59,13 @@ pub mod prelude { pub use crate::os::target::OS; pub use crate::os::target::TARGET_ARCH; pub use crate::os::target::TARGET_OS; - pub use crate::program::command::default_status_checker; - pub use crate::program::command::provider::CommandProvider; + pub use crate::program::Program; + pub use crate::program::Shell; pub use crate::program::command::Command; pub use crate::program::command::IsCommandWrapper; pub use crate::program::command::MyCommand; - pub use crate::program::Program; - pub use crate::program::Shell; + pub use crate::program::command::default_status_checker; + pub use crate::program::command::provider::CommandProvider; pub use crate::cache::goodie::GoodieExt as _; pub use crate::env::accessor::RawVariable as _; @@ -76,9 +76,9 @@ pub mod prelude { pub use crate::extensions::version::PrereleaseExt as _; pub use crate::extensions::version::VersionExt as _; pub use crate::github::release::IsReleaseExt as _; + pub use crate::program::ProgramExt as _; pub use crate::program::command::provider::CommandProviderExt as _; pub use crate::program::version::IsVersion as _; - pub use crate::program::ProgramExt as _; pub fn into(u: U) -> T where diff --git a/build_tools/ci_utils/src/log.rs b/build_tools/ci_utils/src/log.rs index 7d8098a0b91b..386fbed9a8cd 100644 --- a/build_tools/ci_utils/src/log.rs +++ b/build_tools/ci_utils/src/log.rs @@ -4,14 +4,14 @@ use tracing_subscriber::prelude::*; use crate::global; use std::io; -use tracing::subscriber::Interest; use tracing::Metadata; use tracing::Subscriber; +use tracing::subscriber::Interest; +use tracing_subscriber::Layer; +use tracing_subscriber::Registry; use tracing_subscriber::filter::LevelFilter; use tracing_subscriber::fmt::format::FmtSpan; use tracing_subscriber::registry::LookupSpan; -use tracing_subscriber::Layer; -use tracing_subscriber::Registry; pub fn is_our_module_path(path: impl AsRef) -> bool { ["ide_ci::", "enso"].into_iter().any(|prefix| path.as_ref().starts_with(prefix)) diff --git a/build_tools/ci_utils/src/program/command.rs b/build_tools/ci_utils/src/program/command.rs index 44b32008f2a0..feec760e34cf 100644 --- a/build_tools/ci_utils/src/program/command.rs +++ b/build_tools/ci_utils/src/program/command.rs @@ -128,11 +128,7 @@ pub trait IsCommandWrapper { variable: T, value: Option<&V>, ) -> Result<&mut Self> { - if let Some(value) = value { - self.set_env(variable, value) - } else { - Ok(self) - } + if let Some(value) = value { self.set_env(variable, value) } else { Ok(self) } } /////////// @@ -300,11 +296,7 @@ impl Debug for Command { } pub fn default_status_checker(status: ExitStatus) -> Result { - if status.success() { - Ok(()) - } else { - bail!("process exited unsuccessfully: {status}") - } + if status.success() { Ok(()) } else { bail!("process exited unsuccessfully: {status}") } } impl Command { diff --git a/build_tools/ci_utils/src/programs/docker.rs b/build_tools/ci_utils/src/programs/docker.rs index ccfd7a417839..85b2a8e3b713 100644 --- a/build_tools/ci_utils/src/programs/docker.rs +++ b/build_tools/ci_utils/src/programs/docker.rs @@ -64,11 +64,7 @@ impl AsRef for NetworkDriver { impl Default for NetworkDriver { fn default() -> Self { - if TARGET_OS == OS::Windows { - NetworkDriver::Nat - } else { - NetworkDriver::Bridge - } + if TARGET_OS == OS::Windows { NetworkDriver::Nat } else { NetworkDriver::Bridge } } } diff --git a/build_tools/ci_utils/src/programs/git.rs b/build_tools/ci_utils/src/programs/git.rs index 6f291c9bd435..abc46a7543b4 100644 --- a/build_tools/ci_utils/src/programs/git.rs +++ b/build_tools/ci_utils/src/programs/git.rs @@ -6,9 +6,9 @@ use crate::prelude::*; +use crate::RECORD_SEPARATOR; use crate::new_command_type; use crate::programs::git::pretty_format::refs_from_decoration; -use crate::RECORD_SEPARATOR; use std::process::Stdio; diff --git a/build_tools/ci_utils/src/programs/signtool.rs b/build_tools/ci_utils/src/programs/signtool.rs index ff94b0fdf0ee..bcf034a01a77 100644 --- a/build_tools/ci_utils/src/programs/signtool.rs +++ b/build_tools/ci_utils/src/programs/signtool.rs @@ -62,11 +62,7 @@ pub fn locate_windows_sdk() -> Result { // TODO: If we ever want anything more fancy, we should use the `InstallationFolder` key at // `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0` // For now we don't need it, and using `winreg` crate is too much trouble cross-platform. - if sdk_dir.exists() { - Ok(sdk_dir) - } else { - bail!("Windows SDK not found!") - } + if sdk_dir.exists() { Ok(sdk_dir) } else { bail!("Windows SDK not found!") } } /// Sign the given executable with the given certificate. diff --git a/build_tools/ci_utils/src/programs/tar.rs b/build_tools/ci_utils/src/programs/tar.rs index ad35d236a810..2fa7aa8161a9 100644 --- a/build_tools/ci_utils/src/programs/tar.rs +++ b/build_tools/ci_utils/src/programs/tar.rs @@ -45,7 +45,10 @@ impl Compression { } else if extension == "xz" { Ok(Compression::Xz) } else { - bail!("The extension `{}` does not denote a supported compression algorithm for TAR archives.", extension) + bail!( + "The extension `{}` does not denote a supported compression algorithm for TAR archives.", + extension + ) } } } @@ -120,7 +123,9 @@ impl Flavor { } else if text.contains("GNU tar") { Ok(Flavor::Gnu) } else { - bail!("The output of `tar --version` does not contain a recognizable flavor. The version text was: {text}") + bail!( + "The output of `tar --version` does not contain a recognizable flavor. The version text was: {text}" + ) } } } @@ -190,9 +195,11 @@ impl Tar { match paths.as_slice() { [item] => { if let Some(parent) = crate::fs::canonicalize(item)?.parent() { + let file_name = item.file_name(); + // None can happen only when path ends with ".." - that's why we canonicalize + let file_name = file_name.unwrap(); cmd.args(&Switch::WorkingDir(parent)); - cmd.arg(item.file_name().unwrap()); // None can happen only when path ends with - // ".." - that's why we canonicalize + cmd.arg(file_name); } } // [dir] if dir.is_dir() => { diff --git a/build_tools/ci_utils/src/serde.rs b/build_tools/ci_utils/src/serde.rs index 1adf4609c6ec..0545173c4d5f 100644 --- a/build_tools/ci_utils/src/serde.rs +++ b/build_tools/ci_utils/src/serde.rs @@ -2,9 +2,9 @@ use crate::prelude::*; -use serde::de::Error; use serde::Deserializer; use serde::Serializer; +use serde::de::Error; #[derive(Clone, Debug, Deserialize, PartialEq, Eq)] #[serde(untagged)] @@ -138,11 +138,7 @@ pub mod via_string_opt { S: Serializer, T: Display, { - if let Some(value) = value { - ser.collect_str(value) - } else { - ser.serialize_none() - } + if let Some(value) = value { ser.collect_str(value) } else { ser.serialize_none() } } /// Deserializer, that uses [`FromStr`] trait. diff --git a/build_tools/cli/Cargo.toml b/build_tools/cli/Cargo.toml index 9aec5af42be6..4638f7f9a807 100644 --- a/build_tools/cli/Cargo.toml +++ b/build_tools/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "enso-build-cli" -edition = "2021" +edition = "2024" version = "0.1.0" default-run = "enso-build-cli" diff --git a/build_tools/cli/src/arg.rs b/build_tools/cli/src/arg.rs index 901d03a05a87..0fbc9da43ac8 100644 --- a/build_tools/cli/src/arg.rs +++ b/build_tools/cli/src/arg.rs @@ -2,14 +2,14 @@ use enso_build::prelude::*; -use clap::builder::ArgPredicate; -use clap::builder::PossibleValuesParser; -use clap::builder::TypedValueParser; use clap::Arg; use clap::Args; use clap::Parser; use clap::Subcommand; use clap::ValueEnum; +use clap::builder::ArgPredicate; +use clap::builder::PossibleValuesParser; +use clap::builder::TypedValueParser; use derive_where::derive_where; use ide_ci::cache; use ide_ci::github::Repo; @@ -286,6 +286,6 @@ pub struct WatchJob { } /// Clap parser supporting a given set of [`OS`] values. -pub fn possible_os_parser(possible_os: &[OS]) -> impl TypedValueParser { +pub fn possible_os_parser(possible_os: &[OS]) -> impl TypedValueParser + use<> { PossibleValuesParser::new(possible_os.iter().map(|os| os.as_str())).map(|s| OS::from_str(&s)) } diff --git a/build_tools/cli/src/arg/runtime.rs b/build_tools/cli/src/arg/runtime.rs index 018e8352a6f8..9ab3359d135b 100644 --- a/build_tools/cli/src/arg/runtime.rs +++ b/build_tools/cli/src/arg/runtime.rs @@ -1,5 +1,5 @@ -use crate::source_args_hlp; use crate::BuildJob; +use crate::source_args_hlp; use clap::Args; use clap::Subcommand; diff --git a/build_tools/cli/src/bin/enso-remove-draft-releases.rs b/build_tools/cli/src/bin/enso-remove-draft-releases.rs index 462dd8022f56..c818780d7e57 100644 --- a/build_tools/cli/src/bin/enso-remove-draft-releases.rs +++ b/build_tools/cli/src/bin/enso-remove-draft-releases.rs @@ -1,7 +1,7 @@ use enso_build_cli::prelude::*; -use ide_ci::github::setup_octocrab; use ide_ci::github::RepoRef; +use ide_ci::github::setup_octocrab; use ide_ci::io::web::handle_error_response; const REPO: RepoRef = RepoRef { owner: "enso-org", name: "enso" }; diff --git a/build_tools/cli/src/lib.rs b/build_tools/cli/src/lib.rs index 8baac4bd5a55..761f792d4001 100644 --- a/build_tools/cli/src/lib.rs +++ b/build_tools/cli/src/lib.rs @@ -14,28 +14,31 @@ pub mod prelude { use crate::prelude::*; -use crate::arg::java_gen; -use crate::arg::libraries; -use crate::arg::release::Action; use crate::arg::BuildJob; use crate::arg::Cli; use crate::arg::IsTargetSource; use crate::arg::IsWatchableSource; use crate::arg::Target; use crate::arg::WatchJob; +use crate::arg::java_gen; +use crate::arg::libraries; +use crate::arg::release::Action; use anyhow::Context; use arg::BuildDescription; use clap::Parser; use enso_build::cloud_tests; use enso_build::config::Config; use enso_build::context::BuildContext; -use enso_build::engine::context::EnginePackageProvider; use enso_build::engine::BenchmarkType; use enso_build::engine::Benchmarks; use enso_build::engine::StandardLibraryTestsSelection; use enso_build::engine::Tests; +use enso_build::engine::context::EnginePackageProvider; use enso_build::paths::TargetTriple; use enso_build::project; +use enso_build::project::IsTarget; +use enso_build::project::IsWatchable; +use enso_build::project::IsWatcher; use enso_build::project::backend; use enso_build::project::backend::Backend; use enso_build::project::gui::Gui; @@ -43,9 +46,6 @@ use enso_build::project::ide; use enso_build::project::ide::Ide; use enso_build::project::runtime; use enso_build::project::runtime::Runtime; -use enso_build::project::IsTarget; -use enso_build::project::IsWatchable; -use enso_build::project::IsWatcher; use enso_build::source::BuildSource; use enso_build::source::BuildTargetJob; use enso_build::source::CiRunSource; @@ -58,8 +58,8 @@ use enso_build::source::WatchTargetJob; use enso_build::source::WithDestination; use enso_build::version; use ide_ci::actions::workflow::is_in_env; -use ide_ci::cache::goodie::graalvm; use ide_ci::cache::Cache; +use ide_ci::cache::goodie::graalvm; use ide_ci::fs::remove_if_exists; use ide_ci::github::release; use ide_ci::github::setup_octocrab; @@ -552,11 +552,7 @@ impl Processor { ) -> BoxFuture<'static, Result> { let release = self.release(release_id); let add_prefix = move |name: String| { - if let Some(prefix) = name_prefix.clone() { - format!("{prefix}-{name}") - } else { - name - } + if let Some(prefix) = name_prefix.clone() { format!("{prefix}-{name}") } else { name } }; async move { let artifacts = build_job.await?; diff --git a/build_tools/enso-formatter/Cargo.toml b/build_tools/enso-formatter/Cargo.toml index c4032142723d..b8f02988b1ea 100644 --- a/build_tools/enso-formatter/Cargo.toml +++ b/build_tools/enso-formatter/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-formatter" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" [dependencies] regex = { workspace = true } diff --git a/build_tools/install/Cargo.toml b/build_tools/install/Cargo.toml index 75692efb07ef..32a784a8e201 100644 --- a/build_tools/install/Cargo.toml +++ b/build_tools/install/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-install" version = "0.1.0" -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/build_tools/install/build.rs b/build_tools/install/build.rs index 6535d28524cf..e26af262843f 100644 --- a/build_tools/install/build.rs +++ b/build_tools/install/build.rs @@ -6,12 +6,12 @@ use enso_install_config::prelude::*; #[cfg(windows)] -use enso_install_config::embed_resource_from_file; -use enso_install_config::sanitize_and_expose_electron_builder_config; +use enso_install_config::ENSO_ICON_ID; #[cfg(windows)] use enso_install_config::ResourceType; #[cfg(windows)] -use enso_install_config::ENSO_ICON_ID; +use enso_install_config::embed_resource_from_file; +use enso_install_config::sanitize_and_expose_electron_builder_config; use ide_ci::programs::cargo::build_env::OUT_DIR; fn main() { diff --git a/build_tools/install/config/Cargo.toml b/build_tools/install/config/Cargo.toml index 3a087f52629f..d98c005bc624 100644 --- a/build_tools/install/config/Cargo.toml +++ b/build_tools/install/config/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-install-config" version = "0.1.0" -edition = "2021" +edition = "2024" [dependencies] embed-resource = "2.4.0" diff --git a/build_tools/install/config/src/bundler.rs b/build_tools/install/config/src/bundler.rs index a079be7cb901..a90b5e5f59ae 100644 --- a/build_tools/install/config/src/bundler.rs +++ b/build_tools/install/config/src/bundler.rs @@ -8,8 +8,8 @@ use crate::INSTALLER_NAME; use crate::UNINSTALLER_NAME; use ide_ci::env::known::electron_builder::WindowsSigningCredentials; -use ide_ci::programs::cargo; use ide_ci::programs::Cargo; +use ide_ci::programs::cargo; /// Input necessary to generate a Windows installer from unpacked Electron application bundle. #[derive(Debug)] diff --git a/build_tools/install/installer/Cargo.toml b/build_tools/install/installer/Cargo.toml index ab15833aa871..e67c726d652c 100644 --- a/build_tools/install/installer/Cargo.toml +++ b/build_tools/install/installer/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-installer" version = "0.1.0" -edition = "2021" +edition = "2024" [dependencies] anyhow = { workspace = true } diff --git a/build_tools/install/installer/build.rs b/build_tools/install/installer/build.rs index cc6924665199..aad2e8739cbb 100644 --- a/build_tools/install/installer/build.rs +++ b/build_tools/install/installer/build.rs @@ -7,10 +7,10 @@ use ide_ci::prelude::*; -use enso_install_config::sanitize_and_expose_electron_builder_config; use enso_install_config::ENSO_INSTALL_ARCHIVE_PATH; use enso_install_config::ENSO_INSTALL_METADATA_PATH; use enso_install_config::INSTALLER_PAYLOAD_ID; +use enso_install_config::sanitize_and_expose_electron_builder_config; use ide_ci::env::known::cargo::build::OUT_DIR; use ide_ci::programs::cargo; @@ -28,12 +28,16 @@ fn main() { ide_ci::fs::write_if_different(&rc_file, contents).unwrap(); embed_resource::compile(&rc_file, embed_resource::NONE); } else { - println!("cargo:warning={ENSO_INSTALL_ARCHIVE_PATH} is not set, the installer will fail at runtime."); + println!( + "cargo:warning={ENSO_INSTALL_ARCHIVE_PATH} is not set, the installer will fail at runtime." + ); } cargo::build::rerun_if_env_changed(ENSO_INSTALL_METADATA_PATH); if !ENSO_INSTALL_METADATA_PATH.is_set() { - println!("cargo:warning={ENSO_INSTALL_METADATA_PATH} is not set, the installer will fail at runtime."); + println!( + "cargo:warning={ENSO_INSTALL_METADATA_PATH} is not set, the installer will fail at runtime." + ); let placeholder_path = OUT_DIR.get().unwrap().join("metadata.json"); ide_ci::fs::write_if_different(&placeholder_path, "{}").unwrap(); // Set env for the crate. diff --git a/build_tools/install/installer/src/win.rs b/build_tools/install/installer/src/win.rs index 2a6d46c551b0..cdf18ac64966 100644 --- a/build_tools/install/installer/src/win.rs +++ b/build_tools/install/installer/src/win.rs @@ -1,9 +1,9 @@ use ide_ci::prelude::*; +use crate::Payload; use crate::access_payload_metadata; use crate::win::config::Config; use crate::win::logic::install_with_updates; -use crate::Payload; use enso_install::win::local_app_data; diff --git a/build_tools/install/installer/src/win/app.rs b/build_tools/install/installer/src/win/app.rs index b26360da762b..f7fd26d1b5d3 100644 --- a/build_tools/install/installer/src/win/app.rs +++ b/build_tools/install/installer/src/win/app.rs @@ -4,11 +4,11 @@ use native_windows_gui::NativeUi; use std::sync::mpsc::Receiver; extern crate native_windows_gui as nwg; +use crate::InstallerUpdate; use crate::win::access_payload; use crate::win::config; use crate::win::get_install_dir; use crate::win::spawn_installer_thread; -use crate::InstallerUpdate; pub mod ui; diff --git a/build_tools/install/installer/src/win/app/ui.rs b/build_tools/install/installer/src/win/app/ui.rs index 7d9c756963b0..f9f2b342abf4 100644 --- a/build_tools/install/installer/src/win/app/ui.rs +++ b/build_tools/install/installer/src/win/app/ui.rs @@ -12,10 +12,10 @@ extern crate native_windows_gui as nwg; use crate::win::app::InstallerApp; use crate::win::app::PROGRESS_BAR_TICKS; use enso_install_config::ENSO_ICON_ID; +use nwg::NativeUi; use nwg::stretch::geometry::Size; use nwg::stretch::style::Dimension; use nwg::stretch::style::FlexDirection; -use nwg::NativeUi; /// Size for the Enso icon displayed in the window next to the text label. pub const ICON_SIZE: u32 = 32; diff --git a/build_tools/install/installer/src/win/logic.rs b/build_tools/install/installer/src/win/logic.rs index 07327afcb359..f79666e7c01d 100644 --- a/build_tools/install/installer/src/win/logic.rs +++ b/build_tools/install/installer/src/win/logic.rs @@ -2,8 +2,8 @@ use crate::prelude::*; -use crate::win::config::Config; use crate::Payload; +use crate::win::config::Config; use enso_install_config::UNINSTALLER_NAME; use flate2::read::GzDecoder; @@ -144,7 +144,9 @@ pub fn install_with_updates( let bytes_ratio = (bytes_extracted as f64 / total_bytes as f64).min(1.0); let extraction_progresss = (files_ratio + bytes_ratio) / 2.0; let progress = extraction_progress_start + extraction_progress_step * extraction_progresss; - trace!("files_extracted: {files_extracted}/{total_files}, bytes_extracted: {bytes_extracted}/{total_bytes}, extraction_progresss: {extraction_progresss}, progress: {progress}"); + trace!( + "files_extracted: {files_extracted}/{total_files}, bytes_extracted: {bytes_extracted}/{total_bytes}, extraction_progresss: {extraction_progresss}, progress: {progress}" + ); report_progress(progress); Some(install_location.join(entry.path().ok()?)) }; diff --git a/build_tools/install/src/lib.rs b/build_tools/install/src/lib.rs index 1a0f8b1aac75..eb8fb8683593 100644 --- a/build_tools/install/src/lib.rs +++ b/build_tools/install/src/lib.rs @@ -3,18 +3,18 @@ pub mod prelude { pub use ide_ci::prelude::*; - #[cfg(windows)] - pub use winreg::types::ToRegValue; #[cfg(windows)] pub use winreg::RegKey; #[cfg(windows)] pub use winreg::RegValue; + #[cfg(windows)] + pub use winreg::types::ToRegValue; } use enso_install_config::electron_builder; +use ide_ci::log::GlobalFilteringLayer; use ide_ci::log::file_log_layer; use ide_ci::log::stderr_log_layer; -use ide_ci::log::GlobalFilteringLayer; use prelude::*; use sysinfo::Pid; @@ -29,7 +29,7 @@ pub mod win; /// - `$pretty_name` - a human-readable name of the data type that will be used in error messages. #[macro_export] macro_rules! access_built_time_env { - ($env:ident, $typename:ty, $pretty_name:expr) => { + ($env:ident, $typename:ty, $pretty_name:expr_2021) => { { static DATA: std::sync::LazyLock<$typename> = std::sync::LazyLock::new(|| { let crate_name = env!("CARGO_PKG_NAME"); @@ -141,7 +141,10 @@ pub fn is_already_running(install_dir: &Path, ignored_pids: &[Pid]) -> Result) -> Self { - if text.as_ref().ends_with('/') { - Shape::Directory(default()) - } else { - Shape::File - } + if text.as_ref().ends_with('/') { Shape::Directory(default()) } else { Shape::File } } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java index 942b7255c09a..069102ca3970 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/TypeInferenceTest.java @@ -1548,7 +1548,7 @@ public void noSuchMethodOnSelf() throws Exception { @Test public void callingExtensionMethodDefinedElsewhere() throws Exception { - final URI uriA = new URI("memory://local.Project1.modA.enso"); + final URI uriA = new URI("memory://local.Project1.Mod_A.enso"); final Source srcA = Source.newBuilder( "enso", @@ -1561,12 +1561,12 @@ public void callingExtensionMethodDefinedElsewhere() throws Exception { .buildLiteral(); compile(srcA); - final URI uriB = new URI("memory://local.Project1.modB.enso"); + final URI uriB = new URI("memory://local.Project1.Mod_B.enso"); final Source srcB = Source.newBuilder( "enso", """ - import local.Project1.modA.My_Type + import local.Project1.Mod_A.My_Type type Typ_X Value a @@ -1581,13 +1581,13 @@ public void callingExtensionMethodDefinedElsewhere() throws Exception { .buildLiteral(); compile(srcB); - final URI uriC = new URI("memory://local.Project1.modC.enso"); + final URI uriC = new URI("memory://local.Project1.Mod_C.enso"); final Source srcC = Source.newBuilder( "enso", """ - import local.Project1.modA.My_Type - from local.Project1.modB import all + import local.Project1.Mod_A.My_Type + from local.Project1.Mod_B import all foo = inst = My_Type.Value 23 @@ -1601,14 +1601,14 @@ public void callingExtensionMethodDefinedElsewhere() throws Exception { var modC = compile(srcC); var foo = ModuleUtils.findStaticMethod(modC, "foo"); - assertAtomType("local.Project1.modB.Typ_X", ModuleUtils.findAssignment(foo, "x1")); - assertAtomType("local.Project1.modB.Typ_Y", ModuleUtils.findAssignment(foo, "x2")); + assertAtomType("local.Project1.Mod_B.Typ_X", ModuleUtils.findAssignment(foo, "x1")); + assertAtomType("local.Project1.Mod_B.Typ_Y", ModuleUtils.findAssignment(foo, "x2")); } @Test public void callingReexportedExtensionMethods() throws Exception { // Base type definition - final URI uriA = new URI("memory://local.Project1.modA.enso"); + final URI uriA = new URI("memory://local.Project1.Mod_A.enso"); final Source srcA = Source.newBuilder( "enso", @@ -1622,12 +1622,12 @@ public void callingReexportedExtensionMethods() throws Exception { compile(srcA); // Extension methods defined in another module - final URI uriB = new URI("memory://local.Project1.modB.enso"); + final URI uriB = new URI("memory://local.Project1.Mod_B.enso"); final Source srcB = Source.newBuilder( "enso", """ - import local.Project1.modA.My_Type + import local.Project1.Mod_A.My_Type type Typ_X Value a @@ -1643,25 +1643,25 @@ public void callingReexportedExtensionMethods() throws Exception { compile(srcB); // Re-exports of the type and the extension method - final URI uriC = new URI("memory://local.Project1.modC.enso"); + final URI uriC = new URI("memory://local.Project1.Mod_C.enso"); final Source srcC = Source.newBuilder( "enso", """ - export local.Project1.modA.My_Type - export local.Project1.modB.member + export local.Project1.Mod_A.My_Type + export local.Project1.Mod_B.member """, uriC.getAuthority()) .uri(uriC) .buildLiteral(); compile(srcC); - final URI uriD = new URI("memory://local.Project1.modD.enso"); + final URI uriD = new URI("memory://local.Project1.Mod_D.enso"); final Source srcD = Source.newBuilder( "enso", """ - from local.Project1.modC import all + from local.Project1.Mod_C import all foo = inst = My_Type.Value 23 @@ -1675,18 +1675,18 @@ public void callingReexportedExtensionMethods() throws Exception { var modD = compile(srcD); var foo = ModuleUtils.findStaticMethod(modD, "foo"); - assertAtomType("local.Project1.modB.Typ_X", ModuleUtils.findAssignment(foo, "x1")); - assertAtomType("local.Project1.modB.Typ_Y", ModuleUtils.findAssignment(foo, "x2")); + assertAtomType("local.Project1.Mod_B.Typ_X", ModuleUtils.findAssignment(foo, "x1")); + assertAtomType("local.Project1.Mod_B.Typ_Y", ModuleUtils.findAssignment(foo, "x2")); } @Test public void resolveImportedConstructor() throws Exception { - final URI uri = new URI("memory://local.Project1.modA.enso"); + final URI uri = new URI("memory://local.Project1.Mod_A.enso"); final Source src = Source.newBuilder( "enso", """ - from project.modA.My_Type import My_Constructor + from project.Mod_A.My_Type import My_Constructor type My_Type My_Constructor v @@ -1702,13 +1702,13 @@ public void resolveImportedConstructor() throws Exception { var module = compile(src); var foo = ModuleUtils.findStaticMethod(module, "foo"); var x1 = ModuleUtils.findAssignment(foo, "x1"); - assertAtomType("local.Project1.modA.My_Type", x1); + assertAtomType("local.Project1.Mod_A.My_Type", x1); } @Ignore("TODO: for later") @Test public void resolveFQNConstructor() throws Exception { - final URI uri = new URI("memory://local.Project1.modA.enso"); + final URI uri = new URI("memory://local.Project1.Mod_A.enso"); final Source src = Source.newBuilder( "enso", @@ -1717,7 +1717,7 @@ public void resolveFQNConstructor() throws Exception { My_Constructor v foo = - x1 = local.Project1.modA.My_Type.My_Constructor 1 + x1 = local.Project1.Mod_A.My_Type.My_Constructor 1 x1 """, uri.getAuthority()) @@ -1727,11 +1727,11 @@ public void resolveFQNConstructor() throws Exception { var module = compile(src); var foo = ModuleUtils.findStaticMethod(module, "foo"); var x1 = ModuleUtils.findAssignment(foo, "x1"); - assertAtomType("local.Project1.modA.My_Type", x1); + assertAtomType("local.Project1.Mod_A.My_Type", x1); } public static Source anyPrecedenceTestSource() throws URISyntaxException { - final URI uri = new URI("memory://local.Project1.modA.enso"); + final URI uri = new URI("memory://local.Project1.Mod_A.enso"); final Source src = Source.newBuilder( "enso", @@ -1781,7 +1781,7 @@ public static Source anyPrecedenceTestSource() throws URISyntaxException { @Ignore("TODO: missing IR on Numbers") @Test public void overrideMethodOnNumberThroughAny() throws URISyntaxException { - final URI uri = new URI("memory://local.Project1.modA.enso"); + final URI uri = new URI("memory://local.Project1.Mod_A.enso"); final Source src = Source.newBuilder( "enso", @@ -1802,7 +1802,7 @@ public void overrideMethodOnNumberThroughAny() throws URISyntaxException { var module = compile(src); var foo = ModuleUtils.findStaticMethod(module, "foo"); var x1 = ModuleUtils.findAssignment(foo, "x1"); - assertAtomType("local.Project1.modA.A", x1); + assertAtomType("local.Project1.Mod_A.A", x1); } @Test @@ -1812,26 +1812,26 @@ public void precedenceOfMethodsOnAny() throws URISyntaxException { // Other_Type dispatches to parent - Any and gets A var x1 = ModuleUtils.findAssignment(foo, "x1"); - assertAtomType("local.Project1.modA.A", x1); + assertAtomType("local.Project1.Mod_A.A", x1); // My_Type dispatches to overridden and gets B var x2 = ModuleUtils.findAssignment(foo, "x2"); - assertAtomType("local.Project1.modA.B", x2); + assertAtomType("local.Project1.Mod_A.B", x2); // module method overrides Any method - we get C var x3 = ModuleUtils.findAssignment(foo, "x3"); - assertAtomType("local.Project1.modA.C", x3); + assertAtomType("local.Project1.Mod_A.C", x3); // Calling the Any method statically on a type calls the Any implementation (it's not a static // syntax for the override) var x4 = ModuleUtils.findAssignment(foo, "x4"); - assertAtomType("local.Project1.modA.A", x4); + assertAtomType("local.Project1.Mod_A.A", x4); var x6 = ModuleUtils.findAssignment(foo, "x5"); - assertAtomType("local.Project1.modA.D", x6); + assertAtomType("local.Project1.Mod_A.D", x6); var x7 = ModuleUtils.findAssignment(foo, "x6"); - assertAtomType("local.Project1.modA.E", x7); + assertAtomType("local.Project1.Mod_A.E", x7); } @Test diff --git a/engine/runtime-parser/src/main/java/org/enso/compiler/core/TreeToIr.java b/engine/runtime-parser/src/main/java/org/enso/compiler/core/TreeToIr.java index c9435c1e274b..c9407a483e9e 100644 --- a/engine/runtime-parser/src/main/java/org/enso/compiler/core/TreeToIr.java +++ b/engine/runtime-parser/src/main/java/org/enso/compiler/core/TreeToIr.java @@ -700,6 +700,7 @@ private Expression translateCall(Tree ast, boolean isMethod) throws SyntaxExcept var tree = ast; for (; ; ) { switch (tree) { + case Tree.Call call -> tree = call.getValue(); case Tree.App app when app.getArg() instanceof Tree.SuspendedDefaultArguments -> { hasDefaultsSuspended = true; tree = app.getFunc(); @@ -828,6 +829,8 @@ private Expression translateCall(Tree ast, boolean isMethod) throws SyntaxExcept private Name translateOldStyleLambdaArgumentName( Tree arg, boolean[] suspended, Expression[] defaultValue) throws SyntaxException { return switch (arg) { + case Tree.Call e -> + translateOldStyleLambdaArgumentName(e.getValue(), suspended, defaultValue); case Tree.Group g -> translateOldStyleLambdaArgumentName(g.getBody(), suspended, defaultValue); case Tree.Wildcard wild -> new Name.Blank(getIdentifiedLocation(wild.getToken()), meta()); @@ -1018,6 +1021,7 @@ yield translateSyntaxError( } case Tree.Number n -> translateNumber(n); case Tree.Ident id -> translateIdent(id, isMethod); + case Tree.Call call -> translateExpressionImpl(call.getValue(), isMethod); case Tree.MultiSegmentApp app -> { var fnName = new StringBuilder(); var sep = ""; @@ -1097,9 +1101,12 @@ yield new IfThenElse( List args = nil(); for (var line : body.getArguments()) { var expr = line.getExpression(); - if (expr instanceof Tree.Ident) { - var call = translateCallArgument(expr); - args = join(call, args); + if (expr instanceof Tree.Call call) { + var value = call.getValue(); + if (value instanceof Tree.Ident) { + var arg = translateCallArgument(value); + args = join(arg, args); + } } } yield patchPrefixWithBlock(fn, block, args); @@ -1405,6 +1412,7 @@ Tree applySkip(Tree tree) { case Tree.OprApp app -> app.getLhs(); case Tree.PropertyAccess access -> access.getLhs(); case Tree.Ident ident when ident.getToken().isTypeOrConstructor() -> null; + case Tree.Call call -> call.getValue(); case Tree.Ident ignored -> { done = true; yield tree; @@ -1513,6 +1521,7 @@ yield new Syntax( .build(); } case Tree.Ident id -> buildName(getIdentifiedLocation(id), id.getToken(), false); + case Tree.Call call -> translateType(call.getValue()); case Tree.Group group -> translateType(group.getBody()); case Tree.UnaryOprApp un -> translateType(un.getRhs()); case Tree.Wildcard wild -> new Name.Blank(getIdentifiedLocation(wild), meta()); @@ -1583,6 +1592,7 @@ private Expression patchPrefixWithBlock( private Application.Prefix translateBuiltinAnnotation( Name.BuiltinAnnotation ir, Tree expr, List callArgs) { return switch (expr) { + case Tree.Call call -> translateBuiltinAnnotation(ir, call.getValue(), callArgs); case Tree.App fn -> { var fnAsArg = translateCallArgument(fn.getArg()); yield translateBuiltinAnnotation(ir, fn.getFunc(), join(fnAsArg, callArgs)); @@ -1903,6 +1913,9 @@ private List qualifiedNameSegments(Tree t, boolean generateId) throws Synt return join( new Name.Blank(getIdentifiedLocation(wild.getToken(), generateId), meta()), nil()); } + if (t instanceof Tree.Call call) { + t = call.getValue(); + } List names = nil(); while (t instanceof Tree.PropertyAccess app) { names = join(sanitizeName(buildName(app.getRhs(), generateId)), names); diff --git a/lib/rust/launcher-shims/Cargo.toml b/lib/rust/launcher-shims/Cargo.toml index 69931463e742..50b8bf128d10 100644 --- a/lib/rust/launcher-shims/Cargo.toml +++ b/lib/rust/launcher-shims/Cargo.toml @@ -2,7 +2,7 @@ name = "launcher-shims" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Small wrappers for the launcher executable used for testing launcher upgrade." publish = false diff --git a/lib/rust/launcher-shims/src/lib.rs b/lib/rust/launcher-shims/src/lib.rs index 21cfa2afe0b0..0c3e012ae2e4 100644 --- a/lib/rust/launcher-shims/src/lib.rs +++ b/lib/rust/launcher-shims/src/lib.rs @@ -4,8 +4,8 @@ use std::env; use std::fs::OpenOptions; use std::io; use std::path::PathBuf; -use std::process::exit; use std::process::Command; +use std::process::exit; // ==================== // === WrapLauncher === diff --git a/lib/rust/macro-utils/BUILD.bazel b/lib/rust/macro-utils/BUILD.bazel index 0bc89c45a6df..366b9fb38b51 100644 --- a/lib/rust/macro-utils/BUILD.bazel +++ b/lib/rust/macro-utils/BUILD.bazel @@ -5,7 +5,7 @@ rust_library( name = "enso_macro_utils", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True), diff --git a/lib/rust/macro-utils/Cargo.toml b/lib/rust/macro-utils/Cargo.toml index 613773953295..5895947ab2cd 100644 --- a/lib/rust/macro-utils/Cargo.toml +++ b/lib/rust/macro-utils/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-macro-utils" version = "0.2.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Utilities for writing macros." readme = "README.md" homepage = "https://github.com/enso-org/enso/lib/rust/macro-utils" diff --git a/lib/rust/metamodel/BUILD.bazel b/lib/rust/metamodel/BUILD.bazel index c064c45dbb75..365470342672 100644 --- a/lib/rust/metamodel/BUILD.bazel +++ b/lib/rust/metamodel/BUILD.bazel @@ -9,7 +9,7 @@ rust_library( "rust", "java", ], - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True) + [ diff --git a/lib/rust/metamodel/Cargo.toml b/lib/rust/metamodel/Cargo.toml index 487ebf6a02b7..526b7de9e000 100644 --- a/lib/rust/metamodel/Cargo.toml +++ b/lib/rust/metamodel/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-metamodel" version = "0.1.0" -edition = "2021" +edition = "2024" authors = ["Enso Team "] [dependencies] diff --git a/lib/rust/metamodel/lexpr/Cargo.toml b/lib/rust/metamodel/lexpr/Cargo.toml index fbf02a218fbb..06c1c0c3b19d 100644 --- a/lib/rust/metamodel/lexpr/Cargo.toml +++ b/lib/rust/metamodel/lexpr/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-metamodel-lexpr" version = "0.1.0" -edition = "2021" +edition = "2024" authors = ["Enso Team "] [dependencies] diff --git a/lib/rust/metamodel/src/meta/transform.rs b/lib/rust/metamodel/src/meta/transform.rs index 6c88642eac39..3effac7b51fd 100644 --- a/lib/rust/metamodel/src/meta/transform.rs +++ b/lib/rust/metamodel/src/meta/transform.rs @@ -28,7 +28,7 @@ pub fn flatten(graph: &mut TypeGraph, ids: &mut BTreeSet) { /// For design notes, see [`flatten`]. fn flatten_(graph: &mut TypeGraph, to_flatten: &mut BTreeSet, outer: TypeId) { let outer_fields = match &mut graph[outer].data { - Data::Struct(ref mut fields) => std::mem::take(fields), + Data::Struct(fields) => std::mem::take(fields), _ => return, }; let child_field = graph[outer].child_field; diff --git a/lib/rust/parser/BUILD.bazel b/lib/rust/parser/BUILD.bazel index 2f8d1101e574..c1e014610cc8 100644 --- a/lib/rust/parser/BUILD.bazel +++ b/lib/rust/parser/BUILD.bazel @@ -6,7 +6,7 @@ rust_library( name = "enso_parser", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True) + [ "//lib/rust/parser/src/syntax/tree/visitor:enso_parser_syntax_tree_visitor", "//lib/rust/parser/macros:enso_parser_macros", diff --git a/lib/rust/parser/debug/Cargo.toml b/lib/rust/parser/debug/Cargo.toml index 543a8eff58a7..e932481cf1a9 100644 --- a/lib/rust/parser/debug/Cargo.toml +++ b/lib/rust/parser/debug/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-parser-debug" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Enso parser debugging tools." readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/parser/debug/fuzz/Cargo.toml b/lib/rust/parser/debug/fuzz/Cargo.toml index 48f65fbe3ff2..c09296e74de7 100644 --- a/lib/rust/parser/debug/fuzz/Cargo.toml +++ b/lib/rust/parser/debug/fuzz/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-parser-fuzz" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Binary for fuzzing Enso parser with AFL" readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/parser/debug/src/s_expr.rs b/lib/rust/parser/debug/src/s_expr.rs index 7fcb183b5d72..4863fc4f743a 100644 --- a/lib/rust/parser/debug/src/s_expr.rs +++ b/lib/rust/parser/debug/src/s_expr.rs @@ -53,11 +53,7 @@ where let text_escape_token = rust_to_meta[&TextEscape::reflect().id]; let token_to_str = move |token: Value| { let range = token_code_range(&token, base); - if range.is_empty() { - "".into() - } else { - code[range].to_owned().into_boxed_str() - } + if range.is_empty() { "".into() } else { code[range].to_owned().into_boxed_str() } }; for token in identish_tokens { let token_to_str_ = token_to_str.clone(); diff --git a/lib/rust/parser/debug/tests/parse.rs b/lib/rust/parser/debug/tests/parse.rs index 40451438d5d9..a95c899f4eeb 100644 --- a/lib/rust/parser/debug/tests/parse.rs +++ b/lib/rust/parser/debug/tests/parse.rs @@ -27,7 +27,7 @@ use insta::assert_snapshot; // =========================== macro_rules! test_parse { - ( $code:expr, @$expected:tt, $parse:ident ) => { + ( $code:expr_2021, @$expected:tt, $parse:ident ) => { let code = $code; let code = code.as_ref(); let tree = enso_parser_debug::test::$parse(code); @@ -42,13 +42,13 @@ macro_rules! test_parse { } macro_rules! test_module { - ( $code:expr, @$expected:tt ) => { + ( $code:expr_2021, @$expected:tt ) => { test_parse!($code, @$expected, parse_module); }; } macro_rules! test_block { - ( $code:expr, @$expected:tt ) => { + ( $code:expr_2021, @$expected:tt ) => { test_parse!($code, @$expected, parse_block); } } @@ -65,21 +65,21 @@ fn nothing() { #[test] fn application() { test_block!("a b c", - @"(BodyBlock #((ExpressionStatement () (App (App (Ident a) (Ident b)) (Ident c)))))"); + @"(BodyBlock #((ExpressionStatement () (Call (App (App (Ident a) (Ident b)) (Ident c))))))"); } #[test] fn parentheses() { test_block!("(a b)", - @"(BodyBlock #((ExpressionStatement () (Group (App (Ident a) (Ident b))))))"); + @"(BodyBlock #((ExpressionStatement () (Group (Call (App (Ident a) (Ident b)))))))"); test_block!("x)", @"Space required between terms: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("(x", @"Unclosed parenthesis in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("(a) (b)", - @"(BodyBlock #((ExpressionStatement () (App (Group (Ident a)) (Group (Ident b))))))"); + @"(BodyBlock #((ExpressionStatement () (Call (App (Group (Ident a)) (Group (Ident b)))))))"); test_block!("((a b) c)", - @"(BodyBlock #((ExpressionStatement () (Group (App (Group (App (Ident a) (Ident b))) (Ident c))))))"); + @"(BodyBlock #((ExpressionStatement () (Group (Call (App (Group (Call (App (Ident a) (Ident b)))) (Ident c)))))))"); test_block!("(a).b", @"(BodyBlock #((ExpressionStatement () (PropertyAccess (Group (Ident a)) b))))"); } @@ -119,7 +119,7 @@ fn if_then_else_chained_block() { test_block!("if True then True else False\n . to_text\n . as_value", @r#"(BodyBlock #((ExpressionStatement () (OperatorBlockApplication (MultiSegmentApp #(((Ident if) (Ident True)) ((Ident then) (Ident True)) ((Ident else) (Ident False)))) #(((Ok ".") (Ident to_text)) ((Ok ".") (Ident as_value))) #()))))"#); test_block!("if True then True else False\n . to_text\n . as_value\n . done 42", - @r#"(BodyBlock #((ExpressionStatement () (OperatorBlockApplication (MultiSegmentApp #(((Ident if) (Ident True)) ((Ident then) (Ident True)) ((Ident else) (Ident False)))) #(((Ok ".") (Ident to_text)) ((Ok ".") (Ident as_value)) ((Ok ".") (App (Ident done) (Number () "42" ())))) #()))))"#); + @r#"(BodyBlock #((ExpressionStatement () (OperatorBlockApplication (MultiSegmentApp #(((Ident if) (Ident True)) ((Ident then) (Ident True)) ((Ident else) (Ident False)))) #(((Ok ".") (Ident to_text)) ((Ok ".") (Ident as_value)) ((Ok ".") (Call (App (Ident done) (Number () "42" ()))))) #()))))"#); } // === Comments === @@ -145,9 +145,9 @@ fn function_documentation() { test_module!(&["type Foo", " ## Test indent handling", " ", " foo bar = foo"].join("\n"), @r#"(BodyBlock #((TypeDef Foo #() #((Function ((#((Section " Test indent handling"))) #(() ())) #() () () (Ident foo) #((() (Ident bar) () ())) () (Ident foo))))))"#); test_module!("expression ## unexpected", - @"Unexpected documentation at end of line: (BodyBlock #((ExpressionStatement () (App (Ident expression) (Invalid)))))"); + @"Unexpected documentation at end of line: (BodyBlock #((ExpressionStatement () (Call (App (Ident expression) (Invalid))))))"); test_block!("expression ## unexpected", - @"Unexpected documentation at end of line: (BodyBlock #((ExpressionStatement () (App (Ident expression) (Invalid)))))"); + @"Unexpected documentation at end of line: (BodyBlock #((ExpressionStatement () (Call (App (Ident expression) (Invalid))))))"); } #[test] @@ -335,7 +335,7 @@ fn function_inline_simple_args() { test_module!("foo a b c = x", @"(BodyBlock #((Function () #() () () (Ident foo) #((() (Ident a) () ()) (() (Ident b) () ()) (() (Ident c) () ())) () (Ident x))))"); test_module!("foo _ = x", - @"(BodyBlock #((Function () #() () () (Ident foo) #((() (Wildcard -1) () ())) () (Ident x))))"); + @"(BodyBlock #((Function () #() () () (Ident foo) #((() (Wildcard) () ())) () (Ident x))))"); test_module!("foo a =x", @"Each operator on the left side of an assignment operator must be applied to two operands, with the same spacing on each side: (BodyBlock #((Invalid)))"); } @@ -354,7 +354,7 @@ fn function_no_body() { test_module!("foo a b c =", @"(BodyBlock #((Function () #() () () (Ident foo) #((() (Ident a) () ()) (() (Ident b) () ()) (() (Ident c) () ())) () ())))"); test_module!("foo _ =", - @"(BodyBlock #((Function () #() () () (Ident foo) #((() (Wildcard -1) () ())) () ())))"); + @"(BodyBlock #((Function () #() () () (Ident foo) #((() (Wildcard) () ())) () ())))"); } #[test] @@ -376,9 +376,9 @@ fn function_qualified() { #[test] fn ignored_arguments() { test_module!("f _ = x", - @"(BodyBlock #((Function () #() () () (Ident f) #((() (Wildcard -1) () ())) () (Ident x))))"); + @"(BodyBlock #((Function () #() () () (Ident f) #((() (Wildcard) () ())) () (Ident x))))"); test_module!("f ~_ = x", - @r#"(BodyBlock #((Function () #() () () (Ident f) #(("~" (Wildcard -1) () ())) () (Ident x))))"#); + @r#"(BodyBlock #((Function () #() () () (Ident f) #(("~" (Wildcard) () ())) () (Ident x))))"#); } #[test] @@ -404,15 +404,15 @@ fn function_inline_return_specification() { #[test] fn ignored_argument_patterns() { test_block!("_ -> x", - @r#"(BodyBlock #((ExpressionStatement () (OprApp (Wildcard 0) (Ok "->") (Ident x)))))"#); + @r#"(BodyBlock #((ExpressionStatement () (OprApp (Wildcard) (Ok "->") (Ident x)))))"#); test_block!("_-> x", - @r#"(BodyBlock #((ExpressionStatement () (OprApp (Wildcard 0) (Ok "->") (Ident x)))))"#); - test_block!("_ = x", @"(BodyBlock #((Assignment () (Wildcard -1) (Ident x))))"); - test_block!("_= x", @"(BodyBlock #((Assignment () (Wildcard -1) (Ident x))))"); + @r#"(BodyBlock #((ExpressionStatement () (OprApp (Wildcard) (Ok "->") (Ident x)))))"#); + test_block!("_ = x", @"(BodyBlock #((Assignment () (Wildcard) (Ident x))))"); + test_block!("_= x", @"(BodyBlock #((Assignment () (Wildcard) (Ident x))))"); test_block!("\\_ -> x", - @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Wildcard -1) () ())) "->" (Ident x)))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Wildcard) () ())) "->" (Ident x)))))"#); test_block!("\\_-> x", - @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Wildcard -1) () ())) "->" (Ident x)))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Wildcard) () ())) "->" (Ident x)))))"#); } // === Named arguments === @@ -420,41 +420,41 @@ fn ignored_argument_patterns() { #[test] fn named_arguments() { test_block!("f x=y", - @"(BodyBlock #((ExpressionStatement () (NamedApp (Ident f) x (Ident y)))))"); + @"(BodyBlock #((ExpressionStatement () (Call (NamedApp (Ident f) x (Ident y))))))"); test_block!("f (x = y)", - @"(BodyBlock #((ExpressionStatement () (NamedApp (Ident f) x (Ident y)))))"); + @"(BodyBlock #((ExpressionStatement () (Call (NamedApp (Ident f) x (Ident y))))))"); test_block!("f (x = y", @"Unclosed parenthesis in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("f (x=y", @"Unclosed parenthesis in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("f x=)", - @"Unmatched delimiter: (BodyBlock #((ExpressionStatement () (NamedApp (Ident f) x (Invalid)))))"); + @"Unmatched delimiter: (BodyBlock #((ExpressionStatement () (Call (NamedApp (Ident f) x (Invalid))))))"); test_block!("f (x =)", - @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (App (Ident f) (Group (Invalid))))))"); + @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (Call (App (Ident f) (Group (Invalid)))))))"); test_block!("(x a=b)", - @"(BodyBlock #((ExpressionStatement () (Group (NamedApp (Ident x) a (Ident b))))))"); + @"(BodyBlock #((ExpressionStatement () (Group (Call (NamedApp (Ident x) a (Ident b)))))))"); test_block!("(x a=b.c)", - @"(BodyBlock #((ExpressionStatement () (Group (NamedApp (Ident x) a (PropertyAccess (Ident b) c))))))"); + @"(BodyBlock #((ExpressionStatement () (Group (Call (NamedApp (Ident x) a (PropertyAccess (Ident b) c)))))))"); test_block!("catch handler=exc->\n throw", - @r#"(BodyBlock #((ExpressionStatement () (NamedApp (Ident catch) handler (OprApp (Ident exc) (Ok "->") (BodyBlock #((ExpressionStatement () (Ident throw)))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (NamedApp (Ident catch) handler (OprApp (Ident exc) (Ok "->") (BodyBlock #((ExpressionStatement () (Ident throw))))))))))"#); test_block!("sort by=x-> y-> compare x y", - @r#"(BodyBlock #((ExpressionStatement () (NamedApp (Ident sort) by (OprApp (Ident x) (Ok "->") (OprApp (Ident y) (Ok "->") (App (App (Ident compare) (Ident x)) (Ident y))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (NamedApp (Ident sort) by (OprApp (Ident x) (Ok "->") (OprApp (Ident y) (Ok "->") (Call (App (App (Ident compare) (Ident x)) (Ident y))))))))))"#); test_block!("sort by=(<) xs", - @r#"(BodyBlock #((ExpressionStatement () (App (NamedApp (Ident sort) by (Group (OprApp () (Ok "<") ()))) (Ident xs)))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (NamedApp (Ident sort) by (Group (OprApp () (Ok "<") ()))) (Ident xs))))))"#); test_block!("sort by=(x-> x) y-> compare x y", - @r#"(BodyBlock #((ExpressionStatement () (App (NamedApp (Ident sort) by (Group (OprApp (Ident x) (Ok "->") (Ident x)))) (OprApp (Ident y) (Ok "->") (App (App (Ident compare) (Ident x)) (Ident y)))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (NamedApp (Ident sort) by (Group (OprApp (Ident x) (Ok "->") (Ident x)))) (OprApp (Ident y) (Ok "->") (Call (App (App (Ident compare) (Ident x)) (Ident y)))))))))"#); test_block!("sort by=(x-> x) 1", - @r#"(BodyBlock #((ExpressionStatement () (App (NamedApp (Ident sort) by (Group (OprApp (Ident x) (Ok "->") (Ident x)))) (Number () "1" ())))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (NamedApp (Ident sort) by (Group (OprApp (Ident x) (Ok "->") (Ident x)))) (Number () "1" ()))))))"#); test_block!("foo to=", - @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (App (Ident foo) (Invalid)))))"); + @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (Call (App (Ident foo) (Invalid))))))"); test_module!("foo to=", - @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (App (Ident foo) (Invalid)))))"); + @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (Call (App (Ident foo) (Invalid))))))"); test_block!("(foo to=)", - @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (Group (App (Ident foo) (Invalid))))))"); + @"Operator must be applied to two operands: (BodyBlock #((ExpressionStatement () (Group (Call (App (Ident foo) (Invalid)))))))"); test_block!("filter (foo to=(1))", - @r#"(BodyBlock #((ExpressionStatement () (App (Ident filter) (Group (NamedApp (Ident foo) to (Group (Number () "1" ()))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (Ident filter) (Group (Call (NamedApp (Ident foo) to (Group (Number () "1" ()))))))))))"#); test_block!("foo . bar baz=quux", - @"(BodyBlock #((ExpressionStatement () (NamedApp (PropertyAccess (Ident foo) bar) baz (Ident quux)))))"); + @"(BodyBlock #((ExpressionStatement () (Call (NamedApp (PropertyAccess (Ident foo) bar) baz (Ident quux))))))"); } // === Default arguments === @@ -462,7 +462,7 @@ fn named_arguments() { #[test] fn default_app() { test_block!("f default", - @"(BodyBlock #((ExpressionStatement () (App (Ident f) (Ident default)))))"); + @"(BodyBlock #((ExpressionStatement () (Call (App (Ident f) (Ident default))))))"); } #[test] @@ -531,7 +531,7 @@ fn code_block_body() { #[test] fn operator_block() { test_block!(["value = nums", " * each random", " + constant"].join("\n"), - @r#"(BodyBlock #((Assignment () (Ident value) (OperatorBlockApplication (Ident nums) #(((Ok "*") (App (Ident each) (Ident random))) ((Ok "+") (Ident constant))) #()))))"#); + @r#"(BodyBlock #((Assignment () (Ident value) (OperatorBlockApplication (Ident nums) #(((Ok "*") (Call (App (Ident each) (Ident random)))) ((Ok "+") (Ident constant))) #()))))"#); } #[test] @@ -549,10 +549,10 @@ fn argument_block_precedence() { // Argument block has lower precedence than application, so combined inline/block application is // possible. test_module!(["f 1 n=2", " 3", " 4"].join("\n"), - @r#"(BodyBlock #((ExpressionStatement () (ArgumentBlockApplication (NamedApp (App (Ident f) (Number () "1" ())) n (Number () "2" ())) #((Number () "3" ()) (Number () "4" ()))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (ArgumentBlockApplication (Call (NamedApp (App (Ident f) (Number () "1" ())) n (Number () "2" ()))) #((Number () "3" ()) (Number () "4" ()))))))"#); // Argument block has lower precedence than assignment. test_block!(["x = f 1 2", " 3", " 4"].join("\n"), - @r#"(BodyBlock #((Assignment () (Ident x) (ArgumentBlockApplication (App (App (Ident f) (Number () "1" ())) (Number () "2" ())) #((Number () "3" ()) (Number () "4" ()))))))"#); + @r#"(BodyBlock #((Assignment () (Ident x) (ArgumentBlockApplication (Call (App (App (Ident f) (Number () "1" ())) (Number () "2" ()))) #((Number () "3" ()) (Number () "4" ()))))))"#); } #[test] @@ -648,15 +648,7 @@ fn precedence() { #[test] fn dot_operator_precedence() { test_block!("x y . f v", - @"(BodyBlock #((ExpressionStatement () (App (PropertyAccess (App (Ident x) (Ident y)) f) (Ident v)))))"); -} - -#[test] -fn dot_operator_template_function() { - test_block!("foo._", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (TemplateFunction 1 (Invalid)))))"); - test_block!("_.foo", - @"(BodyBlock #((ExpressionStatement () (TemplateFunction 1 (PropertyAccess (Wildcard 0) foo)))))"); + @"(BodyBlock #((ExpressionStatement () (Call (App (PropertyAccess (Call (App (Ident x) (Ident y))) f) (Ident v))))))"); } #[test] @@ -681,23 +673,12 @@ fn pipeline_operators() { @r#"(BodyBlock #((ExpressionStatement () (OprApp (Ident a) (Ok "|>") (Ident f)))))"#); } -#[test] -fn accessor_operator() { - // Test that the accessor operator `.` is treated like any other operator. - test_block!("Console.", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); - test_block!(".", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); - test_block!(".log", - @"(BodyBlock #((ExpressionStatement () (PropertyAccess () log))))"); -} - #[test] fn operator_sections() { test_block!(".map (+2 * 3) *7", - @r#"(BodyBlock #((ExpressionStatement () (App (App (PropertyAccess () map) (Group (OprApp (OprApp () (Ok "+") (Number () "2" ())) (Ok "*") (Number () "3" ())))) (OprApp () (Ok "*") (Number () "7" ()))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (App (PropertyAccess () map) (Group (OprApp (OprApp () (Ok "+") (Number () "2" ())) (Ok "*") (Number () "3" ())))) (OprApp () (Ok "*") (Number () "7" ())))))))"#); test_block!(".sum 1", - @r#"(BodyBlock #((ExpressionStatement () (App (PropertyAccess () sum) (Number () "1" ())))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (PropertyAccess () sum) (Number () "1" ()))))))"#); test_block!("+1 + x", @r#"(BodyBlock #((ExpressionStatement () (OprApp (OprApp () (Ok "+") (Number () "1" ())) (Ok "+") (Ident x)))))"#); test_block!("increment = 1 +", @@ -715,11 +696,11 @@ fn operator_sections() { #[test] fn template_functions() { test_block!("_.map (_ + 2*3) _*7", - @r#"(BodyBlock #((ExpressionStatement () (TemplateFunction 1 (App (App (PropertyAccess (Wildcard 0) map) (Group (TemplateFunction 1 (OprApp (Wildcard 0) (Ok "+") (OprApp (Number () "2" ()) (Ok "*") (Number () "3" ())))))) (TemplateFunction 1 (OprApp (Wildcard 0) (Ok "*") (Number () "7" ()))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (TemplateFunction (Call (App (App (PropertyAccess (Wildcard) map) (Group (TemplateFunction (OprApp (Wildcard) (Ok "+") (OprApp (Number () "2" ()) (Ok "*") (Number () "3" ())))))) (TemplateFunction (OprApp (Wildcard) (Ok "*") (Number () "7" ())))))))))"#); test_block!("_.sum 1", - @r#"(BodyBlock #((ExpressionStatement () (TemplateFunction 1 (App (PropertyAccess (Wildcard 0) sum) (Number () "1" ()))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (TemplateFunction (Call (App (PropertyAccess (Wildcard) sum) (Number () "1" ())))))))"#); test_block!("_+1 + x", - @r#"(BodyBlock #((ExpressionStatement () (TemplateFunction 1 (OprApp (OprApp (Wildcard 0) (Ok "+") (Number () "1" ())) (Ok "+") (Ident x))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (TemplateFunction (OprApp (OprApp (Wildcard) (Ok "+") (Number () "1" ())) (Ok "+") (Ident x))))))"#); } // === Unary Operators === @@ -739,7 +720,7 @@ fn unary_operator_missing_operand() { #[test] fn unary_operator_at_end_of_expression() { test_block!("foo ~", - @"Operator must be applied to an operand: (BodyBlock #((ExpressionStatement () (App (Ident foo) (Invalid)))))"); + @"Operator must be applied to an operand: (BodyBlock #((ExpressionStatement () (Call (App (Ident foo) (Invalid))))))"); } #[test] @@ -786,7 +767,7 @@ fn minus_section() { #[test] fn minus_unary() { test_block!("f -x", - @r#"(BodyBlock #((ExpressionStatement () (App (Ident f) (UnaryOprApp "-" (Ident x))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (Ident f) (UnaryOprApp "-" (Ident x)))))))"#); test_block!("-x", @r#"(BodyBlock #((ExpressionStatement () (UnaryOprApp "-" (Ident x)))))"#); test_block!("(-x)", @@ -812,7 +793,7 @@ fn minus_unary_in_method_app() { test_block!("-1.x", @r#"(BodyBlock #((ExpressionStatement () (PropertyAccess (UnaryOprApp "-" (Number () "1" ())) x))))"#); test_block!("-1.up_to 100", - @r#"(BodyBlock #((ExpressionStatement () (App (PropertyAccess (UnaryOprApp "-" (Number () "1" ())) up_to) (Number () "100" ())))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (PropertyAccess (UnaryOprApp "-" (Number () "1" ())) up_to) (Number () "100" ()))))))"#); } #[test] @@ -828,7 +809,7 @@ fn autoscope_operator() { test_block!("x = ..True", @r#"(BodyBlock #((Assignment () (Ident x) (AutoscopedIdentifier ".." True))))"#); test_block!("x = f ..True", - @r#"(BodyBlock #((Assignment () (Ident x) (App (Ident f) (AutoscopedIdentifier ".." True)))))"#); + @r#"(BodyBlock #((Assignment () (Ident x) (Call (App (Ident f) (AutoscopedIdentifier ".." True))))))"#); test_block!("x = ..not_a_constructor", @"The auto-scope operator may only be applied to a capitalized identifier: (BodyBlock #((Assignment () (Ident x) (Invalid))))"); test_block!("x = case a of ..True -> True", @@ -838,13 +819,13 @@ fn autoscope_operator() { test_block!("x = ..Foo.Bar", @r#"(BodyBlock #((Assignment () (Ident x) (PropertyAccess (AutoscopedIdentifier ".." Foo) Bar))))"#); test_block!("x = f .. True", - @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (App (App (Ident f) (Invalid)) (Ident True)))))"); + @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (Call (App (App (Ident f) (Invalid)) (Ident True))))))"); test_block!("x = f (.. ..)", - @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (App (Ident f) (Group (App (Invalid) (Invalid)))))))"); + @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (Call (App (Ident f) (Group (Call (App (Invalid) (Invalid)))))))))"); test_block!("x = f (.. *)", - @r#"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (App (Ident f) (Group (OprApp (Invalid) (Ok "*") ()))))))"#); + @r#"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (Call (App (Ident f) (Group (OprApp (Invalid) (Ok "*") ())))))))"#); test_block!("x = f (.. True)", - @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (App (Ident f) (Group (App (Invalid) (Ident True)))))))"); + @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (Call (App (Ident f) (Group (Call (App (Invalid) (Ident True)))))))))"); test_block!("x = True..", @"Space required between terms: (BodyBlock #((Assignment () (Ident x) (Invalid))))"); test_block!("x = True..True", @@ -852,9 +833,9 @@ fn autoscope_operator() { test_block!("x = ..", @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (Invalid))))"); test_block!("x = .. True", - @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (App (Invalid) (Ident True)))))"); + @"The autoscope operator must be applied to an identifier: (BodyBlock #((Assignment () (Ident x) (Call (App (Invalid) (Ident True))))))"); test_block!("x : .. True", - @r#"The autoscope operator must be applied to an identifier: (BodyBlock #((ExpressionStatement () (TypeAnnotated (Ident x) ":" (App (Invalid) (Ident True))))))"#); + @r#"The autoscope operator must be applied to an identifier: (BodyBlock #((ExpressionStatement () (TypeAnnotated (Ident x) ":" (Call (App (Invalid) (Ident True)))))))"#); } // === Import/Export === @@ -955,9 +936,9 @@ fn type_annotations() { test_block!("val = x : A : B : C", @r#"(BodyBlock #((Assignment () (Ident val) (TypeAnnotated (TypeAnnotated (TypeAnnotated (Ident x) ":" (Ident A)) ":" (Ident B)) ":" (Ident C)))))"#); test_block!("val = foo (x : Int)", - @r#"(BodyBlock #((Assignment () (Ident val) (App (Ident foo) (Group (TypeAnnotated (Ident x) ":" (Ident Int)))))))"#); + @r#"(BodyBlock #((Assignment () (Ident val) (Call (App (Ident foo) (Group (TypeAnnotated (Ident x) ":" (Ident Int))))))))"#); test_block!("(x : My_Type _)", - @r#"(BodyBlock #((ExpressionStatement () (Group (TypeAnnotated (Ident x) ":" (App (Ident My_Type) (TemplateFunction 1 (Wildcard 0))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Group (TypeAnnotated (Ident x) ":" (Call (App (Ident My_Type) (TemplateFunction (Wildcard)))))))))"#); test_module!("x : List Int -> Int", @r#"(BodyBlock #((TypeSignatureDeclaration ((Ident x) ":" (OprApp (App (Ident List) (Ident Int)) (Ok "->") (Ident Int))))))"#); test_module!("p:Plus + m:Plus", @@ -1025,7 +1006,7 @@ x"#, test_module!("x =\n x = '''\n x\nx", @r#"(BodyBlock #((Function () #() () () (Ident x) #() () (BodyBlock #((Assignment () (Ident x) (TextLiteral #((Section "x"))))))) (ExpressionStatement () (Ident x))))"#); test_block!("foo = bar '''\n baz", - @r#"(BodyBlock #((Assignment () (Ident foo) (App (Ident bar) (TextLiteral #((Section "baz")))))))"#); + @r#"(BodyBlock #((Assignment () (Ident foo) (Call (App (Ident bar) (TextLiteral #((Section "baz"))))))))"#); test_block!("'''\n \\t'", @r#"(BodyBlock #((ExpressionStatement () (TextLiteral #((Escape 9) (Section "'"))))))"#); test_block!("'''\n x\n \\t'", @@ -1084,17 +1065,17 @@ fn new_lambdas() { test_block!("\\ v ->\n v", @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Ident v) () ())) "->" (BodyBlock #((ExpressionStatement () (Ident v))))))))"#); test_block!("f \\ v ->\n v", - @r#"(BodyBlock #((ExpressionStatement () (App (Ident f) (Lambda "\\" #((() (Ident v) () ())) "->" (BodyBlock #((ExpressionStatement () (Ident v)))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (Ident f) (Lambda "\\" #((() (Ident v) () ())) "->" (BodyBlock #((ExpressionStatement () (Ident v))))))))))"#); test_block!(r#"\a b -> x"#, @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Ident a) () ()) (() (Ident b) () ())) "->" (Ident x)))))"#); test_block!(r#"\~x -> x"#, @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #(("~" (Ident x) () ())) "->" (Ident x)))))"#); test_block!(r#"\a (b = f _ 1) -> f a"#, - @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Ident a) () ()) (() (Ident b) () ((App (App (Ident f) (TemplateFunction 1 (Wildcard 0))) (Number () "1" ()))))) "->" (App (Ident f) (Ident a))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Lambda "\\" #((() (Ident a) () ()) (() (Ident b) () ((Call (App (App (Ident f) (TemplateFunction (Wildcard))) (Number () "1" ())))))) "->" (Call (App (Ident f) (Ident a)))))))"#); test_block!("\\", @"Invalid macro invocation: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("\\ v", - @"Invalid macro invocation: (BodyBlock #((ExpressionStatement () (App (Invalid) (Ident v)))))"); + @"Invalid macro invocation: (BodyBlock #((ExpressionStatement () (Call (App (Invalid) (Ident v))))))"); test_block!("\\v", @"Space required between terms: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("\\v->", @@ -1120,11 +1101,11 @@ fn old_lambdas() { test_block!("x ->\n y", @r#"(BodyBlock #((ExpressionStatement () (OprApp (Ident x) (Ok "->") (BodyBlock #((ExpressionStatement () (Ident y))))))))"#); test_block!("f x->\n y", - @r#"(BodyBlock #((ExpressionStatement () (App (Ident f) (OprApp (Ident x) (Ok "->") (BodyBlock #((ExpressionStatement () (Ident y)))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (Ident f) (OprApp (Ident x) (Ok "->") (BodyBlock #((ExpressionStatement () (Ident y))))))))))"#); test_block!("x->y-> z", @r#"(BodyBlock #((ExpressionStatement () (OprApp (Ident x) (Ok "->") (OprApp (Ident y) (Ok "->") (Ident z))))))"#); test_block!("foo = x -> (y = bar x) -> x + y", - @r#"(BodyBlock #((Assignment () (Ident foo) (OprApp (Ident x) (Ok "->") (OprApp (Group (OprApp (Ident y) (Ok "=") (App (Ident bar) (Ident x)))) (Ok "->") (OprApp (Ident x) (Ok "+") (Ident y)))))))"#); + @r#"(BodyBlock #((Assignment () (Ident foo) (OprApp (Ident x) (Ok "->") (OprApp (Group (OprApp (Ident y) (Ok "=") (Call (App (Ident bar) (Ident x))))) (Ok "->") (OprApp (Ident x) (Ok "+") (Ident y)))))))"#); } // === Pattern Matching === @@ -1134,7 +1115,7 @@ fn pattern_irrefutable() { test_block!("Point x_val = my_point", @"(BodyBlock #((Assignment () (App (Ident Point) (Ident x_val)) (Ident my_point))))"); test_block!("Vector _ = x", - @"(BodyBlock #((Assignment () (App (Ident Vector) (Wildcard -1)) (Ident x))))"); + @"(BodyBlock #((Assignment () (App (Ident Vector) (Wildcard)) (Ident x))))"); test_block!("X.y = z", @"(BodyBlock #((Function () #() () () (PropertyAccess (Ident X) y) #() () (Ident z))))"); } @@ -1158,9 +1139,9 @@ fn case_expression() { test_block!(["case a of", " Vector_2d x y -> x"].join("\n"), @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident a) #(((() (App (App (Ident Vector_2d) (Ident x)) (Ident y)) "->" (Ident x))))))))"#); test_block!(["case self of", " Vector_2d -> x", " _ -> x"].join("\n"), - @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident self) #(((() (Ident Vector_2d) "->" (Ident x))) ((() (Wildcard -1) "->" (Ident x))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident self) #(((() (Ident Vector_2d) "->" (Ident x))) ((() (Wildcard) "->" (Ident x))))))))"#); test_block!(["case foo of", " v:My_Type -> x", " v:(My_Type _ _) -> x"].join("\n"), - @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident foo) #(((() (TypeAnnotated (Ident v) ":" (Ident My_Type)) "->" (Ident x))) ((() (TypeAnnotated (Ident v) ":" (Group (App (App (Ident My_Type) (TemplateFunction 1 (Wildcard 0))) (TemplateFunction 1 (Wildcard 0))))) "->" (Ident x))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident foo) #(((() (TypeAnnotated (Ident v) ":" (Ident My_Type)) "->" (Ident x))) ((() (TypeAnnotated (Ident v) ":" (Group (Call (App (App (Ident My_Type) (TemplateFunction (Wildcard))) (TemplateFunction (Wildcard)))))) "->" (Ident x))))))))"#); } #[test] @@ -1178,7 +1159,7 @@ fn case_documentation() { #[test] fn case_by_type() { macro_rules! test_case { - ( $code:expr, $($case:tt)* ) => { + ( $code:expr_2021, $($case:tt)* ) => { test_block!(&format!("case foo of\n {}", $code), $( $case )* ); } } @@ -1195,7 +1176,7 @@ fn case_by_type() { test_case!("v:A->x", @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident foo) #(((() (TypeAnnotated (Ident v) ":" (Ident A)) "->" (Ident x))))))))"#); test_case!("v : A -> _ + x", - @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident foo) #(((() (TypeAnnotated (Ident v) ":" (Ident A)) "->" (TemplateFunction 1 (OprApp (Wildcard 0) (Ok "+") (Ident x))))))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (CaseOf (Ident foo) #(((() (TypeAnnotated (Ident v) ":" (Ident A)) "->" (TemplateFunction (OprApp (Wildcard) (Ok "+") (Ident x))))))))))"#); } #[test] @@ -1207,9 +1188,9 @@ fn suspended_default_arguments_in_pattern() { #[test] fn suspended_default_arguments_in_expression() { test_block!("c = self.value ...", - @"(BodyBlock #((Assignment () (Ident c) (App (PropertyAccess (Ident self) value) (SuspendedDefaultArguments)))))"); + @"(BodyBlock #((Assignment () (Ident c) (Call (App (PropertyAccess (Ident self) value) (SuspendedDefaultArguments))))))"); test_block!("c = self.value...", - @"(BodyBlock #((Assignment () (Ident c) (App (PropertyAccess (Ident self) value) (SuspendedDefaultArguments)))))"); + @"(BodyBlock #((Assignment () (Ident c) (Call (App (PropertyAccess (Ident self) value) (SuspendedDefaultArguments))))))"); } // === Private (project-private) keyword === @@ -1289,9 +1270,9 @@ mod numbers { test_block!("1 . 0", @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("1 .0", - @r#"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (App (Number () "1" ()) (Invalid)))))"#); + @r#"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Call (App (Number () "1" ()) (Invalid))))))"#); test_block!("1. 0", - @r#"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (App (Invalid) (Number () "0" ())))))"#); + @r#"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Call (App (Invalid) (Number () "0" ()))))))"#); } #[test] @@ -1363,21 +1344,21 @@ fn at_operator() { test_module!("foo@bar", @"Space required between terms: (BodyBlock #((ExpressionStatement () (Invalid))))"); test_block!("foo @ bar", - @"Operator must be applied to an operand: (BodyBlock #((ExpressionStatement () (App (App (Ident foo) (Invalid)) (Ident bar)))))"); + @"Operator must be applied to an operand: (BodyBlock #((ExpressionStatement () (Call (App (App (Ident foo) (Invalid)) (Ident bar))))))"); test_module!("foo @ bar", - @"Operator must be applied to an operand: (BodyBlock #((ExpressionStatement () (App (App (Ident foo) (Invalid)) (Ident bar)))))"); + @"Operator must be applied to an operand: (BodyBlock #((ExpressionStatement () (Call (App (App (Ident foo) (Invalid)) (Ident bar))))))"); } #[test] fn annotations() { test_module!("@on_problems P.g\nselect_columns : Text -> Table\nselect_columns text = to_table text", - @r#"(BodyBlock #((Function () #(((on_problems (PropertyAccess (Ident P) g)) #(()))) ((Ident select_columns) ":" (OprApp (Ident Text) (Ok "->") (Ident Table))) () (Ident select_columns) #((() (Ident text) () ())) () (App (Ident to_table) (Ident text)))))"#); + @r#"(BodyBlock #((Function () #(((on_problems (PropertyAccess (Ident P) g)) #(()))) ((Ident select_columns) ":" (OprApp (Ident Text) (Ok "->") (Ident Table))) () (Ident select_columns) #((() (Ident text) () ())) () (Call (App (Ident to_table) (Ident text))))))"#); test_module!("@a\n@b 1 + 1\nf x = x", @r#"(BodyBlock #((Function () #(((a ()) #(())) ((b (OprApp (Number () "1" ()) (Ok "+") (Number () "1" ()))) #(()))) () () (Ident f) #((() (Ident x) () ())) () (Ident x))))"#); test_module!("@x `\nid x = x", @"Unexpected token: (BodyBlock #((Function () #(((x (Invalid)) #(()))) () () (Ident id) #((() (Ident x) () ())) () (Ident x))))"); test_module!("@` foo\nid x = x", - @"Space required between terms: (BodyBlock #((ExpressionStatement () (App (Invalid) (Ident foo))) (Function () #() () () (Ident id) #((() (Ident x) () ())) () (Ident x))))"); + @"Space required between terms: (BodyBlock #((ExpressionStatement () (Call (App (Invalid) (Ident foo)))) (Function () #() () () (Ident id) #((() (Ident x) () ())) () (Ident x))))"); } #[test] @@ -1395,13 +1376,13 @@ fn annotations_on_type_constructors() { #[test] fn inline_builtin_annotations() { test_block!("@Tail_Call go t", - @"(BodyBlock #((ExpressionStatement () (AnnotatedBuiltin Tail_Call #() (App (Ident go) (Ident t))))))"); + @"(BodyBlock #((ExpressionStatement () (AnnotatedBuiltin Tail_Call #() (Call (App (Ident go) (Ident t)))))))"); test_block!("@Tail_Call go (x = y)", - @"(BodyBlock #((ExpressionStatement () (AnnotatedBuiltin Tail_Call #() (NamedApp (Ident go) x (Ident y))))))"); + @"(BodyBlock #((ExpressionStatement () (AnnotatedBuiltin Tail_Call #() (Call (NamedApp (Ident go) x (Ident y)))))))"); test_block!("@Tail_Call go\n a\n b", @"(BodyBlock #((ExpressionStatement () (AnnotatedBuiltin Tail_Call #() (ArgumentBlockApplication (Ident go) #((Ident a) (Ident b)))))))"); test_block!("map _-> @Tail_Call f", - @r#"(BodyBlock #((ExpressionStatement () (App (Ident map) (OprApp (Wildcard 0) (Ok "->") (AnnotatedBuiltin Tail_Call #() (Ident f)))))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (Ident map) (OprApp (Wildcard) (Ok "->") (AnnotatedBuiltin Tail_Call #() (Ident f))))))))"#); } #[test] @@ -1421,7 +1402,7 @@ fn freeze() { test_block!("FREEZE x.f", @"(BodyBlock #((ExpressionStatement () (MultiSegmentApp #(((Ident FREEZE) (PropertyAccess (Ident x) f)))))))"); test_block!("FREEZE x.f y", - @"(BodyBlock #((ExpressionStatement () (MultiSegmentApp #(((Ident FREEZE) (App (PropertyAccess (Ident x) f) (Ident y))))))))"); + @"(BodyBlock #((ExpressionStatement () (MultiSegmentApp #(((Ident FREEZE) (Call (App (PropertyAccess (Ident x) f) (Ident y)))))))))"); } #[test] @@ -1433,7 +1414,7 @@ fn skip() { test_block!("SKIP x.f", @"(BodyBlock #((ExpressionStatement () (MultiSegmentApp #(((Ident SKIP) (PropertyAccess (Ident x) f)))))))"); test_block!("SKIP x.f y", - @"(BodyBlock #((ExpressionStatement () (MultiSegmentApp #(((Ident SKIP) (App (PropertyAccess (Ident x) f) (Ident y))))))))"); + @"(BodyBlock #((ExpressionStatement () (MultiSegmentApp #(((Ident SKIP) (Call (App (PropertyAccess (Ident x) f) (Ident y)))))))))"); } // === Context errors === @@ -1445,7 +1426,7 @@ fn statement_in_expression_context() { test_block!("(y = z)", @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Group (Invalid)))))"); test_block!("(y = z) x", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (App (Group (Invalid)) (Ident x)))))"); + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Call (App (Group (Invalid)) (Ident x))))))"); test_block!("(f x = x)", @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Group (Invalid)))))"); test_block!("y = f x = x", @@ -1480,7 +1461,7 @@ fn big_array() { #[test] fn space_required() { test_block!("foo = if cond.x else.y", - @"Invalid macro invocation: (BodyBlock #((Assignment () (Ident foo) (App (App (Invalid) (PropertyAccess (Ident cond) x)) (PropertyAccess (Ident else) y)))))"); + @"Invalid macro invocation: (BodyBlock #((Assignment () (Ident foo) (Call (App (App (Invalid) (PropertyAccess (Ident cond) x)) (PropertyAccess (Ident else) y))))))"); } #[test] @@ -1539,6 +1520,7 @@ fn unexpected_special_operator() { @"Invalid use of syntactic operator in expression: (BodyBlock #((Assignment () (Ident foo) (Invalid))))"); test_module!("foo = 1, 2", @"Invalid use of syntactic operator in expression: (BodyBlock #((Function () #() () () (Ident foo) #() () (Invalid))))"); + //test_block!("f <| x=2", @r#"Invalid use of syntactic operator in expression: "#); } #[test] @@ -1604,7 +1586,7 @@ fn invalid_token() { fn illegal_foreign_body() { // Foreign is only a keyword on the LHS of an assignment operator. test_module!("foreign 4", - @r#"(BodyBlock #((ExpressionStatement () (App (Ident foreign) (Number () "4" ())))))"#); + @r#"(BodyBlock #((ExpressionStatement () (Call (App (Ident foreign) (Number () "4" ()))))))"#); test_module!("foreign foo = \"4\"", @"Expected function name in foreign function definition: (BodyBlock #((Invalid)))"); test_module!("foreign js foo = 4", @@ -1627,7 +1609,7 @@ fn invalid_unspaced_operator_sequence() { // Due to this special case, there is no reasonable way to interpret this type of expression as // valid when spaces are added in the following way: test_block!("x = y +- z", - @r#"Operator must be applied to an operand: (BodyBlock #((Assignment () (Ident x) (App (App (Ident y) (OprApp () (Ok "+") (Invalid))) (Ident z)))))"#); + @r#"Operator must be applied to an operand: (BodyBlock #((Assignment () (Ident x) (Call (App (App (Ident y) (OprApp () (Ok "+") (Invalid))) (Ident z))))))"#); expect_multiple_operator_error("x =- y"); // // Treating the `-` as a unary operator applied to `z` would be confusing, as it would be in @@ -1640,9 +1622,9 @@ fn invalid_unspaced_operator_sequence() { // // Similar expressions with missing operands should be treated likewise: test_block!("x = y +-", - @r#"Operator must be applied to an operand: (BodyBlock #((Assignment () (Ident x) (App (Ident y) (OprApp () (Ok "+") (Invalid))))))"#); + @r#"Operator must be applied to an operand: (BodyBlock #((Assignment () (Ident x) (Call (App (Ident y) (OprApp () (Ok "+") (Invalid)))))))"#); test_block!("x = +- z", - @r#"Operator must be applied to an operand: (BodyBlock #((Assignment () (Ident x) (App (OprApp () (Ok "+") (Invalid)) (Ident z)))))"#); + @r#"Operator must be applied to an operand: (BodyBlock #((Assignment () (Ident x) (Call (App (OprApp () (Ok "+") (Invalid)) (Ident z))))))"#); expect_multiple_operator_error("x =-"); expect_multiple_operator_error("=- y"); expect_multiple_operator_error("=-"); @@ -1662,17 +1644,39 @@ fn function_expression_in_statement_context() { } #[test] -fn property_access() { +fn property_access_simple() { + test_block!("foo.bar", @"(BodyBlock #((ExpressionStatement () (PropertyAccess (Ident foo) bar))))"); + test_block!("foo . bar", @"(BodyBlock #((ExpressionStatement () (PropertyAccess (Ident foo) bar))))"); +} + +#[test] +fn property_access_lambdas() { + test_block!(".log", + @"(BodyBlock #((ExpressionStatement () (PropertyAccess () log))))"); + test_block!(". log", + @"(BodyBlock #((ExpressionStatement () (PropertyAccess () log))))"); + test_block!("_.foo", + @"(BodyBlock #((ExpressionStatement () (TemplateFunction (PropertyAccess (Wildcard) foo)))))"); + test_block!("_ . foo", + @"(BodyBlock #((ExpressionStatement () (TemplateFunction (PropertyAccess (Wildcard) foo)))))"); +} + +#[test] +fn property_access_invalid() { test_block!("op._", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (TemplateFunction 1 (Invalid)))))"); + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (TemplateFunction (Invalid)))))"); test_block!("op ._", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (App (Ident op) (TemplateFunction 1 (Invalid))))))"); + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Call (App (Ident op) (TemplateFunction (Invalid)))))))"); test_block!("op._.something", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (TemplateFunction 1 (PropertyAccess (Invalid) something)))))"); + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (TemplateFunction (PropertyAccess (Invalid) something)))))"); test_block!("x. length", - @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (App (Invalid) (Ident length)))))"); + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Call (App (Invalid) (Ident length))))))"); test_block!("x.('p')", @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); + test_block!("Console.", + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); + test_block!(".", + @"Invalid use of syntactic operator in expression: (BodyBlock #((ExpressionStatement () (Invalid))))"); } #[test] @@ -1702,9 +1706,9 @@ fn nonsense_inputs() { test_module!("type M = B F(M<'a>) -> S>;", @"Expected identifier or wildcard in argument binding: (BodyBlock #((TypeDef M #((() (Invalid) () ((Invalid))) (() (Invalid) () ()) (() (Invalid) () ()) (() (Invalid) () ()) (() (Invalid) () ())) #())))"); test_module!("'`'\nx `y`\nz", - @"Space required between terms: (BodyBlock #((ExpressionStatement () (Invalid)) (ExpressionStatement () (App (Ident x) (Invalid))) (ExpressionStatement () (Ident z))))"); + @"Space required between terms: (BodyBlock #((ExpressionStatement () (Invalid)) (ExpressionStatement () (Call (App (Ident x) (Invalid)))) (ExpressionStatement () (Ident z))))"); test_module!("if (asGuestValue\n a", - @"Invalid macro invocation: (BodyBlock #((ExpressionStatement () (ArgumentBlockApplication (App (Invalid) (Invalid)) #((Ident a))))))"); + @"Invalid macro invocation: (BodyBlock #((ExpressionStatement () (ArgumentBlockApplication (Call (App (Invalid) (Invalid))) #((Ident a))))))"); test_module!("foo(\n a", @"Space required between terms: (BodyBlock #((ExpressionStatement () (ArgumentBlockApplication (Invalid) #((Ident a))))))"); test_module!("(Vector(), true)", diff --git a/lib/rust/parser/generate-java/BUILD.bazel b/lib/rust/parser/generate-java/BUILD.bazel index 62d05b25b8ae..23bf1335045a 100644 --- a/lib/rust/parser/generate-java/BUILD.bazel +++ b/lib/rust/parser/generate-java/BUILD.bazel @@ -9,7 +9,7 @@ rust_library( ], aliases = aliases(), crate_name = "enso_parser_generate_java", - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True) + [ diff --git a/lib/rust/parser/generate-java/Cargo.toml b/lib/rust/parser/generate-java/Cargo.toml index ec0b8c24458f..f1708430181d 100644 --- a/lib/rust/parser/generate-java/Cargo.toml +++ b/lib/rust/parser/generate-java/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-parser-generate-java" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Generates Java bindings and deserialization for Enso Parser AST types." readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/parser/jni/BUILD.bazel b/lib/rust/parser/jni/BUILD.bazel index e321dad6b59c..07f99721ed8f 100644 --- a/lib/rust/parser/jni/BUILD.bazel +++ b/lib/rust/parser/jni/BUILD.bazel @@ -7,7 +7,7 @@ rust_shared_library( srcs = glob(["src/**/*.rs"]), aliases = aliases(), crate_name = "enso_parser", - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True) + [ diff --git a/lib/rust/parser/jni/Cargo.toml b/lib/rust/parser/jni/Cargo.toml index 8744823cfe5d..c32aab36a71b 100644 --- a/lib/rust/parser/jni/Cargo.toml +++ b/lib/rust/parser/jni/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-parser-jni" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Enso Parser JNI dynamic library." readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/parser/jni/src/lib.rs b/lib/rust/parser/jni/src/lib.rs index 407a111fc8de..8c3449359e9a 100644 --- a/lib/rust/parser/jni/src/lib.rs +++ b/lib/rust/parser/jni/src/lib.rs @@ -12,11 +12,11 @@ use enso_prelude::*; use enso_parser::macros::resolver::RootContext; +use jni::JNIEnv; use jni::objects::JByteBuffer; use jni::objects::JClass; use jni::sys::jobject; use jni::sys::jstring; -use jni::JNIEnv; // ====================== // === Java Interface === @@ -34,7 +34,7 @@ static FAILED_SERIALIZE_AST: &str = "Failed to serialize AST to binary format."; /// The contents of the returned buffer MUST not be accessed after another call to `parseInput`, or /// a call to `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_parseModule( env: JNIEnv, class: JClass, @@ -53,7 +53,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_parseModule( /// The contents of the returned buffer MUST not be accessed after another call to `parseInput`, or /// a call to `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_parseBlock( env: JNIEnv, class: JClass, @@ -109,7 +109,7 @@ fn parse( /// The contents of the returned buffer MUST NOT be accessed after another call to `parseInput`, or /// a call to `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_parseModuleLazy( mut env: JNIEnv, _class: JClass, @@ -136,7 +136,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_parseModuleLazy( /// The contents of the returned buffer MUST NOT be accessed after another call to `parseInput`, or /// a call to `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_parseBlockLazy( mut env: JNIEnv, _class: JClass, @@ -156,7 +156,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_parseBlockLazy( /// Determine the token variant of the provided input. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_isIdentOrOperator( env: JNIEnv, _class: JClass, @@ -187,7 +187,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_isIdentOrOperator( /// The input MUST have been returned by `allocState`, and MUST NOT have previously been passed to /// `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_getLastInputBase( _env: JNIEnv, _class: JClass, @@ -204,7 +204,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_getLastInputBase( /// The input MUST have been returned by `allocState`, and MUST NOT have previously been passed to /// `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_getMetadata( _env: JNIEnv, _class: JClass, @@ -223,7 +223,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_getMetadata( /// Allocate a new parser state object. The returned value should be passed to `freeState` when no /// longer needed. #[allow(unsafe_code, clippy::box_default)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_allocState( _env: JNIEnv, _class: JClass, @@ -238,7 +238,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_allocState( /// The input MUST have been returned by `allocState`, and MUST NOT have previously been passed to /// `freeState`. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_freeState( _env: JNIEnv, _class: JClass, @@ -252,7 +252,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_freeState( /// Returns the string template corresponding to the given warning ID. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_getWarningTemplate( env: JNIEnv, _class: JClass, @@ -271,7 +271,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_getWarningTemplate( /// latter, `parser.parseInput` MUST NOT have been called since the call to `getMetadata` that /// returned the value. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_getUuidHigh( _env: JNIEnv, _class: JClass, @@ -290,7 +290,7 @@ pub extern "system" fn Java_org_enso_syntax2_Parser_getUuidHigh( /// latter, `parser.parseInput` MUST NOT have been called since the call to `getMetadata` that /// returned the value. #[allow(unsafe_code)] -#[no_mangle] +#[unsafe(no_mangle)] pub extern "system" fn Java_org_enso_syntax2_Parser_getUuidLow( _env: JNIEnv, _class: JClass, @@ -319,10 +319,12 @@ fn get_uuid(metadata: u64, code_offset: u64, code_length: u64) -> (u64, u64) { /// The input MUST be valid UTF-8. #[allow(unsafe_code)] unsafe fn decode_utf8_unchecked(input: &[u8]) -> &str { - if cfg!(debug_assertions) { - std::str::from_utf8(input).unwrap() - } else { - std::str::from_utf8_unchecked(input) + unsafe { + if cfg!(debug_assertions) { + std::str::from_utf8(input).unwrap() + } else { + std::str::from_utf8_unchecked(input) + } } } @@ -331,10 +333,12 @@ unsafe fn decode_utf8_unchecked(input: &[u8]) -> &str { /// The input buffer contents MUST be valid UTF-8. #[allow(unsafe_code)] unsafe fn decode_utf8_buffer<'a>(env: &JNIEnv, buffer: &'a JByteBuffer) -> &'a str { - let ptr = env.get_direct_buffer_address(buffer).expect(DIRECT_ALLOCATED); - let len = env.get_direct_buffer_capacity(buffer).expect(DIRECT_ALLOCATED); - let bytes = slice::from_raw_parts(ptr, len); - decode_utf8_unchecked(bytes) + unsafe { + let ptr = env.get_direct_buffer_address(buffer).expect(DIRECT_ALLOCATED); + let len = env.get_direct_buffer_capacity(buffer).expect(DIRECT_ALLOCATED); + let bytes = slice::from_raw_parts(ptr, len); + decode_utf8_unchecked(bytes) + } } // ==================== diff --git a/lib/rust/parser/macros/BUILD.bazel b/lib/rust/parser/macros/BUILD.bazel index b332cc212776..1ae37730a677 100644 --- a/lib/rust/parser/macros/BUILD.bazel +++ b/lib/rust/parser/macros/BUILD.bazel @@ -5,7 +5,7 @@ rust_proc_macro( name = "enso_parser_macros", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True), diff --git a/lib/rust/parser/macros/Cargo.toml b/lib/rust/parser/macros/Cargo.toml index 203067b00184..8665cb35343d 100644 --- a/lib/rust/parser/macros/Cargo.toml +++ b/lib/rust/parser/macros/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-parser-macros" version = "0.1.0" -edition = "2021" +edition = "2024" authors = ["Enso Team "] [lib] diff --git a/lib/rust/parser/schema/BUILD.bazel b/lib/rust/parser/schema/BUILD.bazel index 7fa3fab1aba0..89afcae0cb3f 100644 --- a/lib/rust/parser/schema/BUILD.bazel +++ b/lib/rust/parser/schema/BUILD.bazel @@ -6,7 +6,7 @@ rust_library( name = "enso_parser_schema", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True) + [ diff --git a/lib/rust/parser/schema/Cargo.toml b/lib/rust/parser/schema/Cargo.toml index 4e8497c67970..7cf64436065f 100644 --- a/lib/rust/parser/schema/Cargo.toml +++ b/lib/rust/parser/schema/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-parser-schema" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Generates schema describing Enso Parser AST types." readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/parser/src/lib.rs b/lib/rust/parser/src/lib.rs index 1d7a5e7d60ae..119b6e0f3d82 100644 --- a/lib/rust/parser/src/lib.rs +++ b/lib/rust/parser/src/lib.rs @@ -72,7 +72,7 @@ //! multiple identifiers placed next to each other, and also takes spacing into consideration in //! order to implement spacing-aware precedence rules. After all segments are resolved, the macro //! is being treated as a single token in one of the segments of the parent macro, and is being -//! processed by the operator precedence resolver as well. In the end, a single [`syntax::Tree`] is +//! processed by the operator precedence resolver as well. In the end, a single [`Tree`] is //! produced, containing the parsed expression. #![cfg_attr(feature = "nightly", feature(test))] @@ -90,9 +90,10 @@ use crate::prelude::*; use crate::lexer::Lexer; use crate::macros::resolver::RootContext; use crate::source::Code; -use crate::syntax::Finish; use crate::syntax::token; -use crate::syntax::tree::SyntaxError; + +use crate::syntax::tree::{SyntaxError, Variant}; +use crate::syntax::{Finish, Tree}; mod im_list; @@ -164,16 +165,16 @@ impl Parser { } /// Main entry point. Interprets the input as a module, and returns the resulting [`BodyBlock`]. - pub fn parse_module<'s>(&self, code: &'s str) -> syntax::Tree<'s> { + pub fn parse_module<'s>(&self, code: &'s str) -> Tree<'s> { self.run(code, RootContext::Module) } /// Parses the input as a block. - pub fn parse_block<'s>(&self, code: &'s str) -> syntax::Tree<'s> { + pub fn parse_block<'s>(&self, code: &'s str) -> Tree<'s> { self.run(code, RootContext::Block) } - fn run<'s>(&self, code: &'s str, root_context: RootContext) -> syntax::Tree<'s> { + fn run<'s>(&self, code: &'s str, root_context: RootContext) -> Tree<'s> { let resolver = macros::resolver::Resolver::new(&self.macros, root_context); let ParseResult { value, internal_error } = Lexer::new(code, resolver).finish(); if internal_error.is_some() { @@ -191,29 +192,61 @@ impl Default for Parser { // == Parsing helpers == -fn is_qualified_name(tree: &syntax::Tree) -> bool { +fn unwrap_call(tree: Tree) -> Tree { + if let Tree { variant: Variant::Call(mut call), span, .. } = tree { + call.value.span.left_offset = span.left_offset; + call.value + } else { + tree + } +} + +/// If the input is a qualified name, return it as Ok after discarding any Call nodes; +/// otherwise, return the input unchanged as Err. +fn to_qualified_name(tree: Tree) -> Result { use syntax::tree::*; - matches!(&tree.variant, Variant::Ident(_) | Variant::PropertyAccess(_)) + if matches!(&tree.variant, Variant::Ident(_) | Variant::PropertyAccess(_)) { + return Ok(tree); + } + match tree { + Tree { variant: Variant::Call(mut call), span, .. } => { + call.value.span.left_offset = span.left_offset; + match &call.value.variant { + Variant::Ident(_) | Variant::PropertyAccess(_) => Ok(call.value), + _ => Err(call.value), + } + } + _ => Err(tree), + } } -fn expect_qualified_name(tree: syntax::Tree) -> syntax::Tree { - if is_qualified_name(&tree) { - tree - } else { - tree.with_error(SyntaxError::ExpectedQualifiedName) +fn qn_deep_unwrap_calls(tree: &mut Tree) { + match &mut tree.variant { + Variant::Call(call) => { + let mut inner = mem::take(&mut call.value); + qn_deep_unwrap_calls(&mut inner); + tree.variant = inner.variant; + } + Variant::PropertyAccess(access) => { + if let Some(lhs) = &mut access.lhs { + qn_deep_unwrap_calls(lhs); + } + } + _ => {} } } -fn empty_tree(location: Code) -> syntax::Tree { - syntax::Tree::ident(token::ident(location.clone(), location, false, 0, false, false, false)) +fn expect_qualified_name(tree: Tree) -> Tree { + to_qualified_name(unwrap_call(tree)) + .unwrap_or_else(|tree| tree.with_error(SyntaxError::ExpectedQualifiedName)) } -fn expression_to_pattern(mut input: syntax::Tree<'_>) -> syntax::Tree<'_> { +fn empty_tree(location: Code) -> Tree { + Tree::ident(token::ident(location.clone(), location, false, 0, false, false, false)) +} + +fn expression_to_pattern(mut input: Tree<'_>) -> Tree<'_> { use syntax::tree::*; - if let Variant::Wildcard(wildcard) = &mut input.variant { - wildcard.de_bruijn_index = None; - return input; - } let mut error = None; match input.variant { // === Recursions === @@ -224,7 +257,7 @@ fn expression_to_pattern(mut input: syntax::Tree<'_>) -> syntax::Tree<'_> { } Variant::App(ref mut app) => match &mut **app { // === Special-case error === - &mut App { func: Tree { variant: Variant::Ident(ref ident), .. }, .. } + App { func: Tree { variant: Variant::Ident(ident), .. }, .. } if !ident.token.is_type => { error = Some(SyntaxError::PatternUnexpectedExpression) @@ -244,6 +277,11 @@ fn expression_to_pattern(mut input: syntax::Tree<'_>) -> syntax::Tree<'_> { out.span.left_offset += input.span.left_offset; return out; } + Variant::Call(value) => { + let mut out = expression_to_pattern(value.value); + out.span.left_offset += input.span.left_offset; + return out; + } // === Unconditional and fallthrough errors === Variant::AutoscopedIdentifier(_) => error = Some(SyntaxError::PatternUnexpectedExpression), @@ -256,11 +294,11 @@ fn expression_to_pattern(mut input: syntax::Tree<'_>) -> syntax::Tree<'_> { } thread_local! { - static DEFAULT_TREE: RefCell>> = default(); + static DEFAULT_TREE: RefCell>> = default(); } -fn transform_tree(tree: &mut syntax::Tree, f: impl FnOnce(syntax::Tree) -> syntax::Tree) { - let default: syntax::Tree<'static> = +fn transform_tree(tree: &mut Tree, f: impl FnOnce(Tree) -> Tree) { + let default: Tree<'static> = DEFAULT_TREE.with(|default| default.borrow_mut().take()).unwrap_or_default(); let original = mem::replace(tree, default); let transformed = f(original); @@ -268,8 +306,7 @@ fn transform_tree(tree: &mut syntax::Tree, f: impl FnOnce(syntax::Tree) -> synta // This lifetime cast is sound because this is the same value as `default` above; its lifetime // was narrowed by the type system when it was stored in the `tree` reference. #[allow(unsafe_code)] - let default_returned = - unsafe { mem::transmute::, syntax::Tree<'static>>(default_returned) }; + let default_returned = unsafe { mem::transmute::, Tree<'static>>(default_returned) }; DEFAULT_TREE.with(|default| *default.borrow_mut() = Some(default_returned)); } diff --git a/lib/rust/parser/src/macros/built_in.rs b/lib/rust/parser/src/macros/built_in.rs index 2fe0eba54280..f7325b13a6fe 100644 --- a/lib/rust/parser/src/macros/built_in.rs +++ b/lib/rust/parser/src/macros/built_in.rs @@ -3,7 +3,6 @@ use crate::macros::pattern::*; use crate::macros::*; -use crate::empty_tree; use crate::expect_qualified_name; use crate::expression_to_pattern; use crate::source::Code; @@ -15,6 +14,8 @@ use crate::syntax::statement::try_parse_doc_comment; use crate::syntax::token; use crate::syntax::tree::SyntaxError; +use crate::{empty_tree, qn_deep_unwrap_calls, unwrap_call}; + // ======================= // === Built-in macros === // ======================= @@ -106,7 +107,13 @@ fn import_body<'s>( Some(_) => expect_ident, None => expect_qualified_name, }; - body = sequence_tree(expression_parser, &mut tokens, expect); + let mut raw_body = sequence_tree(expression_parser, &mut tokens, expect); + if polyglot.is_some() + && let Some(raw_body) = &mut raw_body + { + qn_deep_unwrap_calls(raw_body); + } + body = raw_body; incomplete_import = body.is_none(); &mut import } @@ -543,8 +550,9 @@ fn capture_expressions<'s>( // === Validators === -fn expect_ident(tree: syntax::Tree) -> syntax::Tree { - let error = match &tree.variant { +fn expect_ident(mut tree: syntax::Tree) -> syntax::Tree { + let error = match &mut tree.variant { + syntax::tree::Variant::Call(_) => return expect_ident(unwrap_call(tree)), syntax::tree::Variant::Ident(_) => None, _ => Some(SyntaxError::ExpectedIdent), }; diff --git a/lib/rust/parser/src/serialization.rs b/lib/rust/parser/src/serialization.rs index 999e6eb848ff..b2071c42c10a 100644 --- a/lib/rust/parser/src/serialization.rs +++ b/lib/rust/parser/src/serialization.rs @@ -108,25 +108,3 @@ impl<'de> serde::de::Visitor<'de> for DeserializeU32 { Ok(i) } } - -// ======================================== -// === General purpose value transforms === -// ======================================== - -pub(crate) fn serialize_optional_int(x: &Option, s: S) -> Result -where - S: serde::Serializer, -{ - s.serialize_u32(x.unwrap_or(0xFFFF_FFFF)) -} - -pub(crate) fn deserialize_optional_int<'c, 'de, D>(deserializer: D) -> Result, D::Error> -where - D: serde::Deserializer<'de>, -{ - let value = deserializer.deserialize_u32(DeserializeU32)?; - Ok(match value { - 0xFFFF_FFFF => None, - x => Some(x), - }) -} diff --git a/lib/rust/parser/src/syntax/expression.rs b/lib/rust/parser/src/syntax/expression.rs index 5065b5b01cf6..222512abc29f 100644 --- a/lib/rust/parser/src/syntax/expression.rs +++ b/lib/rust/parser/src/syntax/expression.rs @@ -10,9 +10,9 @@ pub mod consumer; mod group; mod named_app; mod numbers; +mod operand; mod parser; mod reducer; -mod section; mod types; mod whitespace; @@ -21,6 +21,5 @@ mod whitespace; // =============== pub use parser::ExpressionParser; -pub use types::SectionTermination; pub use types::Warnings; pub use whitespace::Spacing; diff --git a/lib/rust/parser/src/syntax/expression/apply.rs b/lib/rust/parser/src/syntax/expression/apply.rs index 3353c1363441..3dd6216daddc 100644 --- a/lib/rust/parser/src/syntax/expression/apply.rs +++ b/lib/rust/parser/src/syntax/expression/apply.rs @@ -1,104 +1,146 @@ use crate::prelude::*; -use crate::syntax::expression::types::*; -use crate::syntax; use crate::syntax::SyntaxError; use crate::syntax::Token; use crate::syntax::Tree; -use crate::syntax::expression::section::MaybeSection; +use crate::syntax::expression::operand::Operand; use crate::syntax::maybe_with_error; use crate::syntax::token; use crate::syntax::token::TokenOperatorProperties; +use crate::syntax::tree::{MultipleOperatorError, Variant}; +use crate::unwrap_call; // ========================== // === Applying operators === // ========================== +pub fn apply_binary_operator<'s>( + tokens: Vec>, + lhs: Option>, + rhs: Option>, +) -> Operand<'s> { + match tokens.len() { + 0 => unreachable!(), + 1 => { + let token = tokens.into_iter().next().unwrap(); + ApplyOperator::token(token).with_lhs(lhs).with_rhs(rhs).finish() + } + _ => Tree::opr_app( + lhs.map(Tree::from), + Err(MultipleOperatorError { + operators: NonEmptyVec::try_from( + tokens + .into_iter() + .map(|opr| opr.with_variant(token::variant::Operator())) + .collect::>(), + ) + .unwrap(), + }), + rhs.map(Tree::from), + ) + .into(), + } +} + +fn apply_operator<'s>(lhs: Option>, opr: Token<'s>, rhs: Option>) -> Tree<'s> { + let error = match (&opr.variant, lhs.as_ref().map(|tree| &tree.variant), &rhs) { + (_, Some(Variant::AutoscopedIdentifier(_)), _) if !opr.is_spaced() => { + Some(SyntaxError::UnexpectedUnspacedOperand) + } + (_, _, None) | (_, None, _) if opr.is_syntactic_binary_operator() => { + Some(SyntaxError::SyntacticOperatorMissingOperand) + } + (token::Variant::Operator(_) | token::Variant::ArrowOperator(_), _, _) => None, + _ => Some(SyntaxError::ExprUnexpectedSyntacticOperator), + }; + let tree = Tree::opr_app(lhs, Ok(opr.with_variant(token::variant::Operator())), rhs); + maybe_with_error(tree, error) +} + +pub fn apply_unary_operator<'s>( + token: token::UnaryOperator<'s>, + rhs: Option>, +) -> Operand<'s> { + ApplyUnaryOperator::token(token).with_rhs(rhs).finish() +} + // === Binary operators === #[derive(Debug)] pub struct ApplyOperator<'s> { - tokens: Vec>, - lhs: Option>>, - rhs: Option>>, - reify_rhs_section: bool, - warnings: Option, + token: Token<'s>, + lhs: Option>, + rhs: Option>, } impl<'s> ApplyOperator<'s> { - pub fn tokens(tokens: Vec>) -> Self { - Self { - tokens, - lhs: default(), - rhs: default(), - reify_rhs_section: default(), - warnings: default(), - } - } - pub fn token(token: Token<'s>) -> Self { - Self::tokens(vec![token]) + Self { token, lhs: None, rhs: None } } - pub fn with_lhs(self, lhs: Option>>) -> Self { + pub fn with_lhs(self, lhs: Option>) -> Self { Self { lhs, ..self } } - pub fn with_rhs(self, rhs: Option>>, reify_rhs_section: bool) -> Self { - Self { rhs, reify_rhs_section, ..self } + pub fn with_rhs(self, rhs: Option>) -> Self { + Self { rhs, ..self } } - pub fn with_warnings(self, warnings: Warnings) -> Self { - Self { warnings: Some(warnings), ..self } - } + pub fn finish(self) -> Operand<'s> { + let Self { token, lhs, mut rhs } = self; + let props = token.operator_properties().unwrap(); + + let wildcards = lhs + .as_ref() + .map(|operand| { + operand.wildcards + && !matches!( + &token.variant, + token::Variant::AssignmentOperator(_) | token::Variant::ArrowOperator(_) + ) + }) + .unwrap_or_default() + || rhs.as_ref().map(|operand| operand.wildcards).unwrap_or_default(); + + if let Some(rhs) = &mut rhs { + if !props.can_form_section() { + rhs.wildcards = false; + } + if matches!(token.variant, token::Variant::DotOperator(_)) + && matches!(rhs.value.variant, Variant::Ident(_)) + { + rhs.call = false; + } + } + let rhs = rhs.map(Tree::from); - pub fn finish(self) -> MaybeSection> { - let Self { tokens, lhs, rhs: rhs_, reify_rhs_section, warnings } = self; - let mut operand = if let Some(lhs_termination) = tokens - .first() - .and_then(|token| token.operator_properties().unwrap().lhs_section_termination()) - { - // Section-terminating special operators - - let lhs = match lhs_termination { - // This mainly serves to handle blanks in the LHS of an ("old-style") lambda, - // preventing them from being treated as creating a template function: In that case, - // the argument definition is parsed before the operator is encountered, so we don't - // know to treat it as a pattern until we have already finished parsing it. - SectionTermination::Unwrap => lhs.map(|op| op.value), - }; - let rhs = rhs_.map(Tree::from); - MaybeSection::from(syntax::tree::apply_operator(lhs, tokens, rhs)) - } else if tokens.len() < 2 - && tokens.first().is_some_and(|opr| !opr.is_syntactic_binary_operator()) - { - // Normal, section-forming operator - - let mut rhs = None; - let mut wildcards = 0; - if let Some(rhs_) = rhs_ { - if reify_rhs_section { - rhs = Some(Tree::from(rhs_)); - } else { - rhs = Some(rhs_.value); - wildcards += rhs_.wildcards; - } + let lhs = lhs.map(|operand| match &token.variant { + token::Variant::AssignmentOperator(_) | token::Variant::ArrowOperator(_) => { + unwrap_call(operand.value) + } + _ if operand.call => Tree::call(operand.value), + _ => operand.value, + }); + + let call = false; + let value = match (token.variant, lhs, rhs) { + (token::Variant::TypeAnnotationOperator(annotation), Some(lhs), Some(rhs)) => { + Tree::type_annotated(lhs, token.with_variant(annotation), rhs) } - let mut operand = - MaybeSection::from(lhs).map(|lhs| syntax::tree::apply_operator(lhs, tokens, rhs)); - operand.wildcards += wildcards; - operand - } else { - // Non-section-forming (but not section-terminating) operator, or multiple-operator - // error. - - let rhs = rhs_.map(Tree::from); - MaybeSection::from(lhs).map(|lhs| syntax::tree::apply_operator(lhs, tokens, rhs)) + ( + token::Variant::DotOperator(dot), + lhs, + Some(Tree { variant: Variant::Ident(rhs), span, .. }), + ) => { + let mut ident = rhs.token; + ident.left_offset = span.left_offset; + let value = Tree::property_access(lhs, token.with_variant(dot), ident); + value + } + (_, lhs, rhs) => apply_operator(lhs, token, rhs), }; - if let Some(warnings) = warnings { - warnings.apply(&mut operand.value); - } - operand + + Operand { value, wildcards, call } } } @@ -107,17 +149,16 @@ impl<'s> ApplyOperator<'s> { #[derive(Debug)] pub struct ApplyUnaryOperator<'s> { token: token::UnaryOperator<'s>, - rhs: Option>>, + rhs: Option>, error: Option, - warnings: Option, } impl<'s> ApplyUnaryOperator<'s> { pub fn token(token: token::UnaryOperator<'s>) -> Self { - Self { token, rhs: default(), error: default(), warnings: default() } + Self { token, rhs: default(), error: default() } } - pub fn with_rhs(self, rhs: Option>>) -> Self { + pub fn with_rhs(self, rhs: Option>) -> Self { Self { rhs, ..self } } @@ -125,24 +166,13 @@ impl<'s> ApplyUnaryOperator<'s> { Self { error, ..self } } - pub fn with_warnings(self, warnings: Warnings) -> Self { - Self { warnings: Some(warnings), ..self } - } - - pub fn finish(self) -> MaybeSection> { - let Self { token, rhs, error, warnings } = self; - MaybeSection::from(rhs).map(|rhs| { - let mut tree = match rhs { - Some(rhs) => Tree::unary_opr_app(token, rhs), - None => { - Tree::opr_app(None, Ok(token.with_variant(token::variant::Operator())), None) - .with_error(SyntaxError::SyntacticOperatorMissingOperandUnary) - } - }; - if let Some(warnings) = warnings { - warnings.apply(&mut tree); - } - maybe_with_error(tree, error) - }) + pub fn finish(self) -> Operand<'s> { + let Self { token, rhs, error } = self; + let tree = match rhs { + Some(rhs) => Tree::unary_opr_app(token, Tree::from(rhs)), + None => Tree::opr_app(None, Ok(token.with_variant(token::variant::Operator())), None) + .with_error(SyntaxError::SyntacticOperatorMissingOperandUnary), + }; + Operand::from(maybe_with_error(tree, error)) } } diff --git a/lib/rust/parser/src/syntax/expression/arity.rs b/lib/rust/parser/src/syntax/expression/arity.rs index a36ed3f0b7f5..31ce61862b20 100644 --- a/lib/rust/parser/src/syntax/expression/arity.rs +++ b/lib/rust/parser/src/syntax/expression/arity.rs @@ -146,10 +146,6 @@ where (Some(_), Some(_)) => None, }; let properties = token.operator_properties().unwrap(); - // The spacing logic here only affects some error representations, except in the `._` case, - // which is not implemented and will probably be made a syntax error. - let reify_rhs_section = properties.can_form_section() - && (lhs == Some(Spacing::Spaced) || rhs == Some(Spacing::Spaced)); let is_value_operation = missing.is_none() && properties.is_value_operation(); self.emit(Operator { left_precedence: lhs @@ -157,7 +153,7 @@ where right_precedence: rhs .map(|spacing| ModifiedPrecedence::new(spacing, precedence, is_value_operation)), associativity, - arity: Arity::Binary { tokens: vec![token], missing, reify_rhs_section }, + arity: Arity::Binary { tokens: vec![token], missing }, }); } @@ -172,9 +168,11 @@ where match missing { None => *missing = Some(BinaryOperand::Right), Some(BinaryOperand::Left) => { - let operand = OperandMaybeNamed::Unnamed( - ApplyOperator::tokens(mem::take(tokens)).finish(), - ); + let operand = OperandMaybeNamed::Unnamed(apply_binary_operator( + mem::take(tokens), + None, + None, + )); self.inner.push_maybe_named_operand(operand); self.lhs_item = Some(MaybeOperator::Operand); } diff --git a/lib/rust/parser/src/syntax/expression/blocks.rs b/lib/rust/parser/src/syntax/expression/blocks.rs index 676b66ec14f0..1d21cad05ba7 100644 --- a/lib/rust/parser/src/syntax/expression/blocks.rs +++ b/lib/rust/parser/src/syntax/expression/blocks.rs @@ -6,7 +6,7 @@ use crate::syntax::ItemConsumer; use crate::syntax::Tree; use crate::syntax::expression::ExpressionParser; use crate::syntax::expression::Spacing; -use crate::syntax::expression::section::MaybeSection; +use crate::syntax::expression::operand::Operand; use crate::syntax::expression::types::Arity; use crate::syntax::expression::types::ModifiedPrecedence; use crate::syntax::expression::types::Operator; @@ -53,14 +53,9 @@ impl<'s> From> for Operator<'s> { impl<'s, Inner> FlattenBlockTrees<'s, Inner> where - Inner: - ItemConsumer<'s> + OperatorConsumer<'s> + Finish>>>, + Inner: ItemConsumer<'s> + OperatorConsumer<'s> + Finish>>, { - pub fn run( - &mut self, - start: usize, - items: &mut Vec>, - ) -> Option>> { + pub fn run(&mut self, start: usize, items: &mut Vec>) -> Option> { if let Some(Item::Block(_)) = items.last() { let Some(Item::Block(lines)) = items.pop() else { unreachable!() }; let block_context = match items.last() { diff --git a/lib/rust/parser/src/syntax/expression/named_app.rs b/lib/rust/parser/src/syntax/expression/named_app.rs index 776938d33c09..bd38a9c45453 100644 --- a/lib/rust/parser/src/syntax/expression/named_app.rs +++ b/lib/rust/parser/src/syntax/expression/named_app.rs @@ -6,7 +6,6 @@ use crate::syntax::ScopeHierarchyConsumer; use crate::syntax::Token; use crate::syntax::Tree; use crate::syntax::expression::reducer::ApplyToOperand; -use crate::syntax::expression::section::MaybeSection; use crate::syntax::expression::types::Arity; use crate::syntax::expression::types::ModifiedPrecedence; use crate::syntax::expression::types::NamedOperandConsumer; @@ -88,8 +87,10 @@ impl<'s> From> for Operand<'s> { } impl<'s> ApplyToOperand<'s> for NamedApp<'s> { - fn apply_to_operand(self, operand: Option>>) -> MaybeSection> { - operand.unwrap().map(|func| self.apply(func)) + fn apply_to_operand(self, operand: Option>) -> Operand<'s> { + let mut result = operand.unwrap().map(|func| self.apply(Tree::from(func))); + result.call = true; + result } } @@ -272,7 +273,7 @@ where fn push_tree(&mut self, tree: Tree<'s>, following_spacing: Option) { self.flush_partial(|| Spacing::of_tree(&tree).into()); self.maybe_end_unspaced_expression(Some(Spacing::of_tree(&tree)), false); - self.inner.push_maybe_named_operand(OperandMaybeNamed::Unnamed(MaybeSection::from(tree))); + self.inner.push_maybe_named_operand(OperandMaybeNamed::Unnamed(Operand::from(tree))); self.maybe_end_unspaced_expression(following_spacing, false); } } diff --git a/lib/rust/parser/src/syntax/expression/operand.rs b/lib/rust/parser/src/syntax/expression/operand.rs new file mode 100644 index 000000000000..0cd3a8847609 --- /dev/null +++ b/lib/rust/parser/src/syntax/expression/operand.rs @@ -0,0 +1,49 @@ +use enso_prelude::*; + +use crate::syntax::Tree; +use crate::syntax::tree; + +// =============== +// === Operand === +// =============== + +/// Wraps a value to perform a bottom-up analysis that inserts template function boundaries and +/// method call nodes. +#[derive(Default, Debug, PartialEq, Eq)] +pub struct Operand<'s> { + pub value: Tree<'s>, + pub wildcards: bool, + pub call: bool, +} + +/// Unit. Creates a Operand from a node. +impl<'s> From> for Operand<'s> { + fn from(value: Tree<'s>) -> Self { + let call = false; + let wildcards = matches!(value.variant, tree::Variant::Wildcard(_)); + Self { value, wildcards, call } + } +} + +/// Counit. Bakes any information about elided operands into the tree. +impl<'s> From> for Tree<'s> { + fn from(operand: Operand<'s>) -> Self { + let Operand { mut value, wildcards, call } = operand; + if call && !matches!(value.variant, tree::Variant::Invalid(_)) { + value = Tree::call(value); + } + if wildcards { + value = Tree::template_function(value); + } + value + } +} + +impl<'s> Operand<'s> { + /// Operate on the contained value without altering the elided-operand information. + pub fn map<'s1>(self, f: impl FnOnce(Tree<'s>) -> Tree<'s1>) -> Operand<'s1> { + let Self { value, wildcards, call } = self; + let value = f(value); + Operand { value, wildcards, call } + } +} diff --git a/lib/rust/parser/src/syntax/expression/parser.rs b/lib/rust/parser/src/syntax/expression/parser.rs index 8e9dfc9362be..ecf02b5d7ff5 100644 --- a/lib/rust/parser/src/syntax/expression/parser.rs +++ b/lib/rust/parser/src/syntax/expression/parser.rs @@ -11,9 +11,10 @@ use crate::syntax::expression::group::BuildGroups; use crate::syntax::expression::group::FlattenGroups; use crate::syntax::expression::named_app::ParseAppNames; use crate::syntax::expression::numbers::ParseNumbers; +use crate::syntax::expression::operand::Operand; use crate::syntax::expression::reducer::Reduce; -use crate::syntax::expression::section::MaybeSection; use crate::syntax::expression::whitespace::PeekSpacing; +use crate::unwrap_call; // ========================= // === Expression Parser === @@ -86,14 +87,10 @@ impl<'s> ExpressionParser<'s> { start: usize, items: &mut Vec>, ) -> Option> { - self.parse_item_tree(start, items).map(|op| op.value) + self.parse_item_tree(start, items).map(|op| op.value).map(unwrap_call) } - fn parse_item_tree( - &mut self, - start: usize, - items: &mut Vec>, - ) -> Option>> { + fn parse_item_tree(&mut self, start: usize, items: &mut Vec>) -> Option> { self.pipeline.run(start, items) } } diff --git a/lib/rust/parser/src/syntax/expression/reducer.rs b/lib/rust/parser/src/syntax/expression/reducer.rs index 81df12955d5d..d023940c205a 100644 --- a/lib/rust/parser/src/syntax/expression/reducer.rs +++ b/lib/rust/parser/src/syntax/expression/reducer.rs @@ -5,7 +5,7 @@ use crate::syntax::expression::types::*; use crate::syntax::Finish; use crate::syntax::ScopeHierarchyConsumer; use crate::syntax::Tree; -use crate::syntax::expression::section::MaybeSection; +use crate::syntax::expression::operand::Operand; use crate::syntax::token; use crate::syntax::tree::apply; @@ -23,13 +23,13 @@ use crate::syntax::tree::apply; /// [^2](https://en.wikipedia.org/wiki/Shunting_yard_algorithm) #[derive(Default, Debug)] pub struct Reduce<'s> { - output: Vec>>, + output: Vec>, operator_stack: Vec>, scope_stack: Vec<(u32, u32)>, } impl<'s> OperandConsumer<'s> for Reduce<'s> { - fn push_operand(&mut self, operand: MaybeSection>) { + fn push_operand(&mut self, operand: Operand<'s>) { self.output.push(operand) } } @@ -60,7 +60,7 @@ impl<'s> OperatorConsumer<'s> for Reduce<'s> { } impl<'s> Finish for Reduce<'s> { - type Result = Option>>; + type Result = Option>; fn finish(&mut self) -> Self::Result { self.reduce(ModifiedPrecedence::min()); @@ -138,37 +138,37 @@ impl<'s> Reduce<'s> { pub trait ApplyToOperands<'s> { fn apply_to_operands( self, - operand: Option>>, - additional_operands: &mut Vec>>, - ) -> MaybeSection>; + operand: Option>, + additional_operands: &mut Vec>, + ) -> Operand<'s>; } pub trait ApplyToOperand<'s> { - fn apply_to_operand(self, operand: Option>>) -> MaybeSection>; + fn apply_to_operand(self, operand: Option>) -> Operand<'s>; } impl<'s, T: ApplyToOperand<'s>> ApplyToOperands<'s> for T { fn apply_to_operands( self, - operand: Option>>, - _: &mut Vec>>, - ) -> MaybeSection> { + operand: Option>, + _: &mut Vec>, + ) -> Operand<'s> { self.apply_to_operand(operand) } } fn reduce_step<'s>( arity: Arity<'s>, - operand: Option>>, - additional_operands: &mut Vec>>, -) -> MaybeSection> { + operand: Option>, + additional_operands: &mut Vec>, +) -> Operand<'s> { match arity { Arity::Unary(token) => { let rhs = operand; debug_assert_ne!(rhs, None); - ApplyUnaryOperator::token(token).with_rhs(rhs).finish() + apply_unary_operator(token, rhs) } - Arity::Binary { tokens, missing, reify_rhs_section } => { + Arity::Binary { tokens, missing } => { let op1 = operand; debug_assert_ne!(op1, None); let (lhs, rhs) = match missing { @@ -180,11 +180,14 @@ fn reduce_step<'s>( (lhs, op1) } }; - ApplyOperator::tokens(tokens).with_lhs(lhs).with_rhs(rhs, reify_rhs_section).finish() + apply_binary_operator(tokens, lhs, rhs) } Arity::App => { - let (lhs, rhs) = (additional_operands.pop().unwrap(), operand); - lhs.map(|lhs| apply(lhs, rhs.unwrap().into())) + let (mut lhs, rhs) = (additional_operands.pop().unwrap(), operand.unwrap()); + lhs.call = false; + let mut result = lhs.map(|lhs| apply(lhs, Tree::from(rhs))); + result.call = true; + result } Arity::NamedApp(app) => app.apply_to_operand(operand), Arity::Annotation(annotation) => annotation.apply_to_operand(operand), diff --git a/lib/rust/parser/src/syntax/expression/section.rs b/lib/rust/parser/src/syntax/expression/section.rs deleted file mode 100644 index 37eac31bdff5..000000000000 --- a/lib/rust/parser/src/syntax/expression/section.rs +++ /dev/null @@ -1,61 +0,0 @@ -use enso_prelude::*; - -use crate::syntax::Tree; -use crate::syntax::tree; - -// ==================== -// === MaybeSection === -// ==================== - -/// Wraps a value, tracking the number of wildcards operands within it. -#[derive(Default, Debug, PartialEq, Eq)] -pub struct MaybeSection { - pub value: T, - /// Number of wildcards in the subtree, potentially forming a *template function*. - pub wildcards: u32, -} - -/// Transpose. -impl From>> for MaybeSection> { - fn from(operand: Option>) -> Self { - match operand { - Some(MaybeSection { value, wildcards }) => Self { value: Some(value), wildcards }, - None => default(), - } - } -} - -/// Unit. Creates a MaybeSection from a node. -impl<'s> From> for MaybeSection> { - fn from(mut value: Tree<'s>) -> Self { - let wildcards = if let Tree { variant: tree::Variant::Wildcard(wildcard), .. } = &mut value - { - debug_assert_eq!(wildcard.de_bruijn_index, None); - wildcard.de_bruijn_index = Some(0); - 1 - } else { - 0 - }; - Self { value, wildcards } - } -} - -/// Counit. Bakes any information about elided operands into the tree. -impl<'s> From>> for Tree<'s> { - fn from(operand: MaybeSection>) -> Self { - let MaybeSection { mut value, wildcards } = operand; - if wildcards != 0 { - value = Tree::template_function(wildcards, value); - } - value - } -} - -impl MaybeSection { - /// Operate on the contained value without altering the elided-operand information. - pub fn map(self, f: impl FnOnce(T) -> U) -> MaybeSection { - let Self { value, wildcards } = self; - let value = f(value); - MaybeSection { value, wildcards } - } -} diff --git a/lib/rust/parser/src/syntax/expression/types.rs b/lib/rust/parser/src/syntax/expression/types.rs index daf022d11a51..b83319730689 100644 --- a/lib/rust/parser/src/syntax/expression/types.rs +++ b/lib/rust/parser/src/syntax/expression/types.rs @@ -7,18 +7,17 @@ use crate::syntax::TreeConsumer; use crate::syntax::expression::annotations::Annotation; use crate::syntax::expression::blocks::ApplicableBlock; use crate::syntax::expression::named_app::NamedApp; -use crate::syntax::expression::section::MaybeSection; use crate::syntax::expression::whitespace::Spacing; use crate::syntax::token; use crate::syntax::tree; use std::fmt::Debug; -// =============== -// === Operand === -// =============== +// ============== +// === Export === +// ============== -pub type Operand<'s> = MaybeSection>; +pub use crate::syntax::expression::operand::Operand; // ================ // === Operator === @@ -52,7 +51,7 @@ impl<'s> Operator<'s> { #[derive(Debug)] pub enum Arity<'s> { Unary(token::UnaryOperator<'s>), - Binary { tokens: Vec>, missing: Option, reify_rhs_section: bool }, + Binary { tokens: Vec>, missing: Option }, App, NamedApp(Box>), Annotation(Annotation<'s>), @@ -136,7 +135,7 @@ impl Warnings { // ====================================== pub trait OperandConsumer<'s> { - fn push_operand(&mut self, operand: MaybeSection>); + fn push_operand(&mut self, operand: Operand<'s>); } pub trait OperatorConsumer<'s> { @@ -169,7 +168,7 @@ impl<'s, T> OperandConsumer<'s> for T where T: NamedOperandConsumer<'s>, { - fn push_operand(&mut self, operand: MaybeSection>) { + fn push_operand(&mut self, operand: Operand<'s>) { self.push_maybe_named_operand(OperandMaybeNamed::Unnamed(operand)); } } @@ -190,18 +189,6 @@ where #[derive(Debug, From)] #[allow(clippy::large_enum_variant)] // Clippy considers the `Unnamed` is "at least 0 bytes". pub enum OperandMaybeNamed<'s> { - Unnamed(MaybeSection>), + Unnamed(Operand<'s>), Named(NamedApp<'s>), } - -// ========================== -// === SectionTermination === -// ========================== - -/// Operator-section/template-function termination behavior of an operator with regard to an -/// operand. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub enum SectionTermination { - /// Discard any operator-section/template-function properties associated with the operand. - Unwrap, -} diff --git a/lib/rust/parser/src/syntax/expression/whitespace.rs b/lib/rust/parser/src/syntax/expression/whitespace.rs index bd8d1c4e5250..c88c8bbdf6f4 100644 --- a/lib/rust/parser/src/syntax/expression/whitespace.rs +++ b/lib/rust/parser/src/syntax/expression/whitespace.rs @@ -101,7 +101,8 @@ fn tree_starts_new_no_space_group(tree: &Tree) -> bool { | AnnotatedBuiltin(_) | Documentation(_) | ExpressionStatement(_) - | ConstructorDefinition(_) => false, + | ConstructorDefinition(_) + | Call(_) => false, } } diff --git a/lib/rust/parser/src/syntax/statement.rs b/lib/rust/parser/src/syntax/statement.rs index 26c5a8ebcfbd..34728420cc44 100644 --- a/lib/rust/parser/src/syntax/statement.rs +++ b/lib/rust/parser/src/syntax/statement.rs @@ -3,9 +3,7 @@ mod function_def; mod type_def; -use crate::empty_tree; use crate::expression_to_pattern; -use crate::is_qualified_name; use crate::prelude::*; use crate::syntax::Item; use crate::syntax::Token; @@ -28,6 +26,7 @@ use crate::syntax::tree::SyntaxError; use crate::syntax::tree::TypeSignature; use crate::syntax::tree::TypeSignatureLine; use crate::syntax::tree::block; +use crate::{empty_tree, to_qualified_name}; pub use function_def::parse_args; @@ -496,7 +495,8 @@ fn to_statement<'s>( | CaseOf(_) | Array(_) | Tuple(_) - | PropertyAccess(_) => Ok(Expression), + | PropertyAccess(_) + | Call(_) => Ok(Expression), OprApp(app) if app.lhs.is_some() && app.rhs.is_some() => Ok(Expression), // Expression, but since it can only occur in tail position, it never needs an // `ExpressionStatement` node. @@ -599,13 +599,16 @@ fn parse_type_annotation_statement<'s>( empty_tree(operator.code.position_after()).with_error(SyntaxError::ExpectedType) }); debug_assert!(items.len() <= start); - if lhs.as_ref().is_some_and(is_qualified_name) { - StatementPrefix::TypeSignature(TypeSignature { name: lhs.unwrap(), operator, type_ }).into() + if let Some(lhs) = lhs { + match to_qualified_name(lhs) { + Ok(lhs) => { + StatementPrefix::TypeSignature(TypeSignature { name: lhs, operator, type_ }).into() + } + Err(lhs) => Tree::type_annotated(lhs, operator, type_).into(), + } } else { - let lhs = lhs.unwrap_or_else(|| { - empty_tree(operator.left_offset.code.position_before()) - .with_error(SyntaxError::ExpectedExpression) - }); + let lhs = empty_tree(operator.left_offset.code.position_before()) + .with_error(SyntaxError::ExpectedExpression); Tree::type_annotated(lhs, operator, type_).into() } } @@ -850,7 +853,7 @@ fn parse_pattern<'s>( match token.variant { token::Variant::Ident(variant) => Tree::ident(token.with_variant(variant)), token::Variant::Wildcard(variant) => { - Tree::wildcard(token.with_variant(variant), None) + Tree::wildcard(token.with_variant(variant)) } _ => tree::to_ast(token).with_error(SyntaxError::ArgDefExpectedPattern), } diff --git a/lib/rust/parser/src/syntax/token/operator.rs b/lib/rust/parser/src/syntax/token/operator.rs index c6080a6bd161..4fea8582828c 100644 --- a/lib/rust/parser/src/syntax/token/operator.rs +++ b/lib/rust/parser/src/syntax/token/operator.rs @@ -1,7 +1,6 @@ use crate::syntax::token::*; use crate::lexer::analyze_non_syntactic_operator; -use crate::syntax::expression::SectionTermination; /// Properties of an operator that are identified when lexing. #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default)] @@ -12,7 +11,6 @@ pub struct OperatorProperties { is_value_operation: bool, is_right_associative: bool, // Special properties - lhs_section_termination: Option, is_modifier: bool, is_compile_time: bool, rhs_is_non_expression: bool, @@ -119,11 +117,6 @@ impl OperatorProperties { !self.is_compile_time } - /// Return the LHS operator-section/template-function behavior of this operator. - pub fn lhs_section_termination(&self) -> Option { - self.lhs_section_termination - } - /// Return whether this operator is a modified-assignment operator. pub fn is_modifier(&self) -> bool { self.is_modifier @@ -185,7 +178,6 @@ impl HasOperatorProperties for variant::AssignmentOperator { fn operator_properties(&self) -> OperatorProperties { OperatorProperties { binary_infix_precedence: Some(Precedence::Assignment), - lhs_section_termination: Some(SectionTermination::Unwrap), is_right_associative: true, is_compile_time: true, ..default() @@ -208,7 +200,6 @@ impl HasOperatorProperties for variant::ArrowOperator { fn operator_properties(&self) -> OperatorProperties { OperatorProperties { binary_infix_precedence: Some(Precedence::Arrow), - lhs_section_termination: Some(SectionTermination::Unwrap), is_right_associative: true, is_compile_time: true, ..default() diff --git a/lib/rust/parser/src/syntax/tree.rs b/lib/rust/parser/src/syntax/tree.rs index f681aa8e8bd5..613a7f06b1bd 100644 --- a/lib/rust/parser/src/syntax/tree.rs +++ b/lib/rust/parser/src/syntax/tree.rs @@ -114,10 +114,6 @@ macro_rules! with_ast_definition { ($f:ident ($($args:tt)*)) => { $f! { $($args) /// The wildcard marker, `_`. Wildcard { pub token: token::Wildcard<'s>, - #[serde(serialize_with = "crate::serialization::serialize_optional_int")] - #[serde(deserialize_with = "crate::serialization::deserialize_optional_int")] - #[reflect(as = i32)] - pub de_bruijn_index: Option, }, /// The suspended-default-arguments marker, `...`. SuspendedDefaultArguments { @@ -146,6 +142,9 @@ macro_rules! with_ast_definition { ($f:ident ($($args:tt)*)) => { $f! { $($args) pub arg: Tree<'s>, pub close: Option>, }, + Call { + pub value: Tree<'s>, + }, /// Application of an operator, like `a + b`. The left or right operands might be missing, /// thus creating an operator section like `a +`, `+ b`, or simply `+`. OprApp { @@ -170,7 +169,6 @@ macro_rules! with_ast_definition { ($f:ident ($($args:tt)*)) => { $f! { $($args) pub ident: token::Ident<'s>, }, TemplateFunction { - pub arguments: u32, pub ast: Tree<'s>, }, /// An application of a multi-segment function, such as `if ... then ... else ...`. Each @@ -774,7 +772,7 @@ pub type OperatorOrError<'s> = Result, MultipleOperatorError #[derive(Clone, Debug, Eq, PartialEq, Serialize, Reflect, Deserialize)] #[allow(missing_docs)] pub struct MultipleOperatorError<'s> { - pub operators: Box>>, + pub operators: NonEmptyVec>, } impl<'s> span::Builder<'s> for MultipleOperatorError<'s> { @@ -1056,70 +1054,11 @@ fn maybe_apply<'s>(f: Option>, x: Tree<'s>) -> Tree<'s> { } } -/// Join two nodes with an operator, in a way appropriate for their types. -pub fn apply_operator<'s>( - lhs: Option>, - opr: Vec>, - rhs: Option>, -) -> Tree<'s> { - match opr.len() { - 0 => unreachable!(), - 1 => { - let opr = opr.into_iter().next().unwrap(); - match (opr.variant, lhs, rhs) { - (token::Variant::TypeAnnotationOperator(annotation), Some(lhs), Some(rhs)) => { - Tree::type_annotated(lhs, opr.with_variant(annotation), rhs) - } - ( - token::Variant::DotOperator(dot), - lhs, - Some(Tree { variant: Variant::Ident(rhs), span, .. }), - ) => { - let mut ident = rhs.token; - ident.left_offset = span.left_offset; - Tree::property_access(lhs, opr.with_variant(dot), ident) - } - (_, lhs, rhs) => { - let error = match (&opr.variant, lhs.as_ref().map(|tree| &tree.variant), &rhs) { - (_, Some(Variant::AutoscopedIdentifier(_)), _) if !opr.is_spaced() => { - Some(SyntaxError::UnexpectedUnspacedOperand) - } - (_, _, None) | (_, None, _) if opr.is_syntactic_binary_operator() => { - Some(SyntaxError::SyntacticOperatorMissingOperand) - } - (token::Variant::Operator(_) | token::Variant::ArrowOperator(_), _, _) => { - None - } - _ => Some(SyntaxError::ExprUnexpectedSyntacticOperator), - }; - let tree = - Tree::opr_app(lhs, Ok(opr.with_variant(token::variant::Operator())), rhs); - maybe_with_error(tree, error) - } - } - } - _ => Tree::opr_app( - lhs, - Err(MultipleOperatorError { - operators: Box::new( - NonEmptyVec::try_from( - opr.into_iter() - .map(|opr| opr.with_variant(token::variant::Operator())) - .collect::>(), - ) - .unwrap(), - ), - }), - rhs, - ), - } -} - /// Create an AST node for a token. pub fn to_ast(token: Token) -> Tree { match token.variant { token::Variant::Ident(ident) => token.with_variant(ident).into(), - token::Variant::Wildcard(wildcard) => Tree::wildcard(token.with_variant(wildcard), default()), + token::Variant::Wildcard(wildcard) => Tree::wildcard(token.with_variant(wildcard)), token::Variant::SuspendedDefaultArguments(t) => Tree::suspended_default_arguments(token.with_variant(t)), token::Variant::OpenSymbol(s) => Tree::group(Some(token.with_variant(s)), default(), default()).with_error(SyntaxError::UnmatchedDelimiter), diff --git a/lib/rust/parser/src/syntax/tree/visitor/BUILD.bazel b/lib/rust/parser/src/syntax/tree/visitor/BUILD.bazel index 82703d56546d..9eb687c15b9a 100644 --- a/lib/rust/parser/src/syntax/tree/visitor/BUILD.bazel +++ b/lib/rust/parser/src/syntax/tree/visitor/BUILD.bazel @@ -5,7 +5,7 @@ rust_proc_macro( name = "enso_parser_syntax_tree_visitor", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True) + [ diff --git a/lib/rust/parser/src/syntax/tree/visitor/Cargo.toml b/lib/rust/parser/src/syntax/tree/visitor/Cargo.toml index 874a3f53588f..a9746f70a6af 100644 --- a/lib/rust/parser/src/syntax/tree/visitor/Cargo.toml +++ b/lib/rust/parser/src/syntax/tree/visitor/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-parser-syntax-tree-visitor" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Enso Parser AST Visitor." readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/prelude/BUILD.bazel b/lib/rust/prelude/BUILD.bazel index 2d1544bebcc5..f8cee6dab3a8 100644 --- a/lib/rust/prelude/BUILD.bazel +++ b/lib/rust/prelude/BUILD.bazel @@ -5,7 +5,7 @@ rust_library( name = "enso_prelude", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True) + [ "//lib/rust/prelude/macros:enso_macros", ], diff --git a/lib/rust/prelude/Cargo.toml b/lib/rust/prelude/Cargo.toml index af3ff5d51d7e..9b326385deb1 100644 --- a/lib/rust/prelude/Cargo.toml +++ b/lib/rust/prelude/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-prelude" version = "0.2.7" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "An augmented standard library in the vein of Haskell's prelude." readme = "README.md" homepage = "https://github.com/enso-org/enso" diff --git a/lib/rust/prelude/macros/BUILD.bazel b/lib/rust/prelude/macros/BUILD.bazel index 2eca1b1ff741..56824fac5538 100644 --- a/lib/rust/prelude/macros/BUILD.bazel +++ b/lib/rust/prelude/macros/BUILD.bazel @@ -5,7 +5,7 @@ rust_proc_macro( name = "enso_macros", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True) + [ diff --git a/lib/rust/prelude/macros/Cargo.toml b/lib/rust/prelude/macros/Cargo.toml index 09c4b838846d..889d753f91f0 100644 --- a/lib/rust/prelude/macros/Cargo.toml +++ b/lib/rust/prelude/macros/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-macros" version = "0.2.7" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Common macros used in Enso codebase." homepage = "https://github.com/enso-org/enso" repository = "https://github.com/enso-org/enso" diff --git a/lib/rust/prelude/macros/src/tagged_enum.rs b/lib/rust/prelude/macros/src/tagged_enum.rs index 7a93ea88d1aa..0bb79e56ae5b 100644 --- a/lib/rust/prelude/macros/src/tagged_enum.rs +++ b/lib/rust/prelude/macros/src/tagged_enum.rs @@ -94,13 +94,9 @@ pub fn run( let vis = &decl.vis; let enum_name = &decl.ident; let variant_names: Vec<_> = data.variants.iter().map(|v| &v.ident).collect(); - let variant_bodies = variant_names.iter().map(|v| { - if is_boxed { - quote!(Box<#v #ty_generics>) - } else { - quote!(#v #ty_generics) - } - }); + let variant_bodies = variant_names + .iter() + .map(|v| if is_boxed { quote!(Box<#v #ty_generics>) } else { quote!(#v #ty_generics) }); let variants_attrs = quote! { #(#variants_attrs)* }; output.push(quote! { #(#enum_attrs)* diff --git a/lib/rust/prelude/src/data/non_empty_vec.rs b/lib/rust/prelude/src/data/non_empty_vec.rs index 848582c9e9d6..4dac04fe78b1 100644 --- a/lib/rust/prelude/src/data/non_empty_vec.rs +++ b/lib/rust/prelude/src/data/non_empty_vec.rs @@ -302,11 +302,7 @@ impl Default for NonEmptyVec { impl TryFrom> for NonEmptyVec { type Error = (); fn try_from(elems: Vec) -> Result { - if elems.is_empty() { - Err(()) - } else { - Ok(NonEmptyVec { elems }) - } + if elems.is_empty() { Err(()) } else { Ok(NonEmptyVec { elems }) } } } diff --git a/lib/rust/prelude/src/std_reexports.rs b/lib/rust/prelude/src/std_reexports.rs index 48bf949863ba..10b18b236a10 100644 --- a/lib/rust/prelude/src/std_reexports.rs +++ b/lib/rust/prelude/src/std_reexports.rs @@ -12,9 +12,9 @@ pub use std::cell::Cell; pub use std::cell::Ref; pub use std::cell::RefCell; pub use std::cell::RefMut; -pub use std::convert::identity; pub use std::convert::TryFrom; pub use std::convert::TryInto; +pub use std::convert::identity; pub use std::fmt; pub use std::fmt::Display; pub use std::hash::Hash; diff --git a/lib/rust/reflect/BUILD.bazel b/lib/rust/reflect/BUILD.bazel index 7b23b2ed08b5..486ad76e7144 100644 --- a/lib/rust/reflect/BUILD.bazel +++ b/lib/rust/reflect/BUILD.bazel @@ -5,7 +5,7 @@ rust_library( name = "enso_reflect", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True) + [ "//lib/rust/reflect/macros:enso_reflect_macros", ], diff --git a/lib/rust/reflect/Cargo.toml b/lib/rust/reflect/Cargo.toml index 8b7c697e0102..02e0aa18a8a4 100644 --- a/lib/rust/reflect/Cargo.toml +++ b/lib/rust/reflect/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-reflect" version = "0.1.0" -edition = "2021" +edition = "2024" authors = ["Enso Team "] [dependencies] diff --git a/lib/rust/reflect/macros/BUILD.bazel b/lib/rust/reflect/macros/BUILD.bazel index 08517276a4eb..c3197aee249c 100644 --- a/lib/rust/reflect/macros/BUILD.bazel +++ b/lib/rust/reflect/macros/BUILD.bazel @@ -5,7 +5,7 @@ rust_proc_macro( name = "enso_reflect_macros", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True), diff --git a/lib/rust/reflect/macros/Cargo.toml b/lib/rust/reflect/macros/Cargo.toml index a66ccba58b1f..dd528f9f29c8 100644 --- a/lib/rust/reflect/macros/Cargo.toml +++ b/lib/rust/reflect/macros/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "enso-reflect-macros" version = "0.1.0" -edition = "2021" +edition = "2024" authors = ["Enso Team "] [lib] diff --git a/lib/rust/reflect/macros/src/lib.rs b/lib/rust/reflect/macros/src/lib.rs index c62abe878605..e2ba1e6ea6d4 100644 --- a/lib/rust/reflect/macros/src/lib.rs +++ b/lib/rust/reflect/macros/src/lib.rs @@ -113,10 +113,10 @@ #![warn(unused_qualifications)] use proc_macro2::TokenStream; -use quote::quote; use quote::ToTokens; -use syn::punctuated::Punctuated; +use quote::quote; use syn::Token; +use syn::punctuated::Punctuated; mod analyze; mod runtime; diff --git a/lib/rust/reflect/src/lib.rs b/lib/rust/reflect/src/lib.rs index 52e4d579bded..6e639c0da992 100644 --- a/lib/rust/reflect/src/lib.rs +++ b/lib/rust/reflect/src/lib.rs @@ -238,7 +238,7 @@ where } macro_rules! reflect_primitive { - ($ty: ty, $primitive: expr) => { + ($ty: ty, $primitive: expr_2021) => { impl Reflect for $ty { type Static = Self; type SubtypeErased = Self::Static; diff --git a/lib/rust/zst/BUILD.bazel b/lib/rust/zst/BUILD.bazel index 142261336254..92a92f0bb025 100644 --- a/lib/rust/zst/BUILD.bazel +++ b/lib/rust/zst/BUILD.bazel @@ -5,7 +5,7 @@ rust_library( name = "enso_zst", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - edition = "2021", + edition = "2024", proc_macro_deps = all_crate_deps(proc_macro = True), visibility = ["//visibility:public"], deps = all_crate_deps(normal = True), diff --git a/lib/rust/zst/Cargo.toml b/lib/rust/zst/Cargo.toml index d8dfc0679ab3..73c0609561e2 100644 --- a/lib/rust/zst/Cargo.toml +++ b/lib/rust/zst/Cargo.toml @@ -2,7 +2,7 @@ name = "enso-zst" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" description = "Zero-sized types, similar to PhantomData, but with more obvious behavior." readme = "README.md" homepage = "https://github.com/enso-org/enso/lib/rust/zst" diff --git a/tools/language-server/logstat/Cargo.toml b/tools/language-server/logstat/Cargo.toml index f14ec4469273..c24de5b6d12b 100644 --- a/tools/language-server/logstat/Cargo.toml +++ b/tools/language-server/logstat/Cargo.toml @@ -2,7 +2,7 @@ name = "logstat" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" [dependencies] clap = { workspace = true } diff --git a/tools/language-server/logstat/src/main.rs b/tools/language-server/logstat/src/main.rs index 154f2287de14..8b7fcebfc078 100644 --- a/tools/language-server/logstat/src/main.rs +++ b/tools/language-server/logstat/src/main.rs @@ -13,14 +13,14 @@ use regex::Regex; use std::io::Result; use std::path::PathBuf; use std::process; -use time::format_description::well_known::Rfc3339; use time::Duration; use time::OffsetDateTime; +use time::format_description::well_known::Rfc3339; use tokio::fs::File; use tokio::io::AsyncBufReadExt; use tokio::io::BufReader; -use tokio_stream::wrappers::LinesStream; use tokio_stream::StreamExt; +use tokio_stream::wrappers::LinesStream; // ===================== // === CLI Arguments === diff --git a/tools/language-server/wstest/Cargo.toml b/tools/language-server/wstest/Cargo.toml index 6cf5d3792a7e..ef70cee55e82 100644 --- a/tools/language-server/wstest/Cargo.toml +++ b/tools/language-server/wstest/Cargo.toml @@ -2,7 +2,7 @@ name = "wstest" version = "0.1.0" authors = ["Enso Team "] -edition = "2021" +edition = "2024" [dependencies] base64 = "0.13.0" diff --git a/tools/language-server/wstest/src/format.rs b/tools/language-server/wstest/src/format.rs index 02651cf78385..aa559b0951a1 100644 --- a/tools/language-server/wstest/src/format.rs +++ b/tools/language-server/wstest/src/format.rs @@ -1,5 +1,5 @@ -use time::format_description::well_known::Rfc3339; use time::OffsetDateTime; +use time::format_description::well_known::Rfc3339; // ================= // === Constants === diff --git a/tools/language-server/wstest/src/main.rs b/tools/language-server/wstest/src/main.rs index 70c24f3a725b..5cf7cd94c0c6 100644 --- a/tools/language-server/wstest/src/main.rs +++ b/tools/language-server/wstest/src/main.rs @@ -275,7 +275,7 @@ async fn main() -> Result<()> { let mut stream_mut = text_stream; loop { - let (message, stream) = stream_mut.into_future().await; + let (message, stream) = StreamExt::into_future(stream_mut).await; let message = if let Some(message) = message { message? @@ -306,7 +306,7 @@ async fn main() -> Result<()> { if let Some(mut stream_mut) = binary_stream { let binary_recv_loop = async { loop { - let (message, stream) = stream_mut.into_future().await; + let (message, stream) = StreamExt::into_future(stream_mut).await; let message = if let Some(message) = message { message?