diff --git a/pkgs/modules/default.nix b/pkgs/modules/default.nix index 32263030..d9a08f13 100644 --- a/pkgs/modules/default.nix +++ b/pkgs/modules/default.nix @@ -53,10 +53,7 @@ let python = pkgs.python313; pypkgs = pkgs.python313Packages; }) - (import ./pyright-extended { - nodejs = pkgs-24_11.nodejs-18_x; - }) - (import ./pyright) + (import ./ty) (import ./ruff) (import ./nodejs { diff --git a/pkgs/modules/python-base/default.nix b/pkgs/modules/python-base/default.nix index f4279e6d..b324b80c 100644 --- a/pkgs/modules/python-base/default.nix +++ b/pkgs/modules/python-base/default.nix @@ -28,7 +28,7 @@ in description = '' Basic module for Python. Includes the interpreter and basic Replit configuration but nothing else. This may be combined with the - pyright-extended module. + ty module. ''; replit.packages = [ diff --git a/pkgs/modules/python/default.nix b/pkgs/modules/python/default.nix index eeadb4fa..7d640de6 100644 --- a/pkgs/modules/python/default.nix +++ b/pkgs/modules/python/default.nix @@ -1,7 +1,5 @@ { python, pypkgs }: { pkgs-unstable -, pkgs-24_11 -, pkgs-23_05 , lib , ... }: @@ -60,10 +58,7 @@ let inherit pkgs python python-ld-library-path; }; - pyright-extended = pkgs.callPackage ../../pyright-extended { - nodejs = pkgs-24_11.nodejs-18_x; - yapf = pypkgs.yapf; - }; + ty = pkgs.callPackage ../../ty { }; sitecustomize = pkgs.callPackage ./sitecustomize.nix { }; @@ -85,7 +80,7 @@ in name = "Python Tools"; displayVersion = pythonVersion; description = '' - Development tools for Python. Includes Python interpreter, Pip, Poetry, Pyright extended language server. + Development tools for Python. Includes Python interpreter, Pip, Poetry, and the ty language server. ''; replit.packages = [ @@ -108,11 +103,11 @@ in ]; }; - replit.dev.languageServers.pyright-extended = { - name = "pyright-extended"; - displayVersion = pyright-extended.version; + replit.dev.languageServers.ty = { + name = "ty"; + displayVersion = ty.version; language = "python3"; - start = "${pyright-extended}/bin/langserver.index.js --stdio"; + start = "${ty}/bin/ty server"; }; replit.dev.packagers.upmPython = { diff --git a/pkgs/modules/ty/default.nix b/pkgs/modules/ty/default.nix new file mode 100644 index 00000000..fb6c27a7 --- /dev/null +++ b/pkgs/modules/ty/default.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: +let + ty = pkgs.callPackage ../../ty { }; +in +{ + id = "ty"; + name = "ty LSP"; + displayVersion = ty.version; + description = '' + Ty is an extremely fast Python type checker from Astral with an integrated language server. + ''; + replit.dev.languageServers.ty = { + name = "ty"; + displayVersion = ty.version; + language = "python3"; + start = "${ty}/bin/ty server"; + }; + + replit.env = { + PATH = "${ty}/bin"; + }; +} diff --git a/pkgs/ty/default.nix b/pkgs/ty/default.nix new file mode 100644 index 00000000..56d817b4 --- /dev/null +++ b/pkgs/ty/default.nix @@ -0,0 +1,86 @@ +{ lib +, stdenv +, rustPlatform +, fetchFromGitHub +, installShellFiles +, buildPackages +, versionCheckHook +, nix-update-script +, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "ty"; + version = "0.0.21"; + + src = fetchFromGitHub { + owner = "astral-sh"; + repo = "ty"; + tag = finalAttrs.version; + fetchSubmodules = true; + hash = "sha256-/R0nw9V0IhuTxRaZNydvk/xGC5V1gYHQxBkAU/Cjsmw="; + }; + + postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' + rm ${finalAttrs.cargoRoot}/crates/ty/tests/file_watching.rs + ''; + + cargoRoot = "ruff"; + buildAndTestSubdir = finalAttrs.cargoRoot; + + cargoBuildFlags = [ "--package=ty" ]; + + cargoHash = "sha256-NaWWX6EAVkEg/KQ+Up0t2fh/24fnTo6i5dDZoOWErjg="; + + nativeBuildInputs = [ installShellFiles ]; + + preCheck = '' + export CARGO_BIN_EXE_ty="$PWD"/target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/ty + ''; + + cargoTestFlags = [ + "--package=ty" + "--package=ty_python_semantic" + "--package=ty_test" + ]; + + checkFlags = [ + "--skip=python_environment::ty_environment_and_active_environment" + "--skip=python_environment::ty_environment_and_discovered_venv" + "--skip=python_environment::ty_environment_is_only_environment" + "--skip=python_environment::ty_environment_is_system_not_virtual" + "--skip=mdtest::generics/pep695/functions.md" + ]; + + nativeInstallCheckInputs = [ versionCheckHook ]; + doInstallCheck = true; + + postInstall = lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) ( + let + emulator = stdenv.hostPlatform.emulator buildPackages; + in + '' + installShellCompletion --cmd ty \ + --bash <(${emulator} $out/bin/ty generate-shell-completion bash) \ + --fish <(${emulator} $out/bin/ty generate-shell-completion fish) \ + --zsh <(${emulator} $out/bin/ty generate-shell-completion zsh) + '' + ); + + passthru = { + updateScript = nix-update-script { }; + }; + + meta = { + description = "Extremely fast Python type checker and language server, written in Rust"; + homepage = "https://github.com/astral-sh/ty"; + changelog = "https://github.com/astral-sh/ty/blob/${finalAttrs.version}/CHANGELOG.md"; + license = lib.licenses.mit; + mainProgram = "ty"; + maintainers = with lib.maintainers; [ + bengsparks + figsoda + GaetanLepage + ]; + }; +}) diff --git a/pkgs/upgrade-map/default.nix b/pkgs/upgrade-map/default.nix index 1db5a6ad..445f6b40 100644 --- a/pkgs/upgrade-map/default.nix +++ b/pkgs/upgrade-map/default.nix @@ -25,6 +25,8 @@ let "go" = "go-1.19"; "go-1.23" = "go-1.24"; "go-1.24" = "go-1.25"; + "pyright" = "ty"; + "pyright-extended" = "ty"; "r-4.3" = "r-4.4"; "r-4.4" = "r-4.5"; "rust" = "rust-1.69";