diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 1ab8f102e496..c1c62e9a09aa 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -20495,6 +20495,12 @@ githubId = 19699320; keys = [ { fingerprint = "FD5D F7A8 85BB 378A 0157 5356 B09C 4220 3566 9AF8"; } ]; }; + RossSmyth = { + name = "Ross Smyth"; + matrix = "@rosssmyth:matrix.org"; + github = "RossSmyth"; + githubId = 18294397; + }; rostan-t = { name = "Rostan Tabet"; email = "rostan.tabet@gmail.com"; diff --git a/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix index c77c1ea30f2a..f2e247b2e57f 100644 --- a/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix +++ b/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix @@ -5,8 +5,16 @@ callPackage, }: let - version = "1.62.0"; - rescript-editor-analysis = callPackage ./rescript-editor-analysis.nix { inherit version; }; + extVersion = "1.62.0"; + rescript-editor-analysis = callPackage ./rescript-editor-analysis.nix { }; + + # Ensure the versions match + version = + if rescript-editor-analysis.version == extVersion then + rescript-editor-analysis.version + else + throw "analysis and extension versions must match"; + arch = if stdenv.hostPlatform.isLinux then "linux" @@ -16,13 +24,19 @@ let throw "Unsupported system: ${stdenv.system}"; analysisDir = "server/analysis_binaries/${arch}"; in -vscode-utils.buildVscodeMarketplaceExtension rec { + +vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { name = "rescript-vscode"; publisher = "chenglou92"; inherit version; hash = "sha256-yUAhysTM9FXo9ZAzrto+tnjnofIUEQAGBg3tjIainrY="; }; + + # For rescript-language-server + passthru.rescript-editor-analysis = rescript-editor-analysis; + + strictDeps = true; postPatch = '' rm -r ${analysisDir} ln -s ${rescript-editor-analysis}/bin ${analysisDir} @@ -35,6 +49,7 @@ vscode-utils.buildVscodeMarketplaceExtension rec { lib.maintainers.dlip lib.maintainers.jayesh-bhoot ]; + platforms = lib.platforms.linux ++ lib.platforms.darwin; license = lib.licenses.mit; }; } diff --git a/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix b/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix index b4763dc417a1..718d14a52851 100644 --- a/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix +++ b/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix @@ -1,16 +1,14 @@ { lib, - stdenv, fetchFromGitHub, - ocaml, ocamlPackages, - dune_3, - version, }: -stdenv.mkDerivation { - pname = "rescript-editor-analysis"; - inherit version; +ocamlPackages.buildDunePackage rec { + pname = "analysis"; + version = "1.62.0"; + + minimalOCamlVersion = "4.10"; src = fetchFromGitHub { owner = "rescript-lang"; @@ -19,20 +17,11 @@ stdenv.mkDerivation { hash = "sha256-v+qCVge57wvA97mtzbxAX9Fvi7ruo6ZyIC14O8uWl9Y="; }; + strictDeps = true; nativeBuildInputs = [ - ocaml - dune_3 ocamlPackages.cppo ]; - buildPhase = '' - dune build -p analysis - ''; - - installPhase = '' - install -D -m0555 _build/default/analysis/bin/main.exe $out/bin/rescript-editor-analysis.exe - ''; - meta = { description = "Analysis binary for the ReScript VSCode plugin"; homepage = "https://github.com/rescript-lang/rescript-vscode"; @@ -41,5 +30,6 @@ stdenv.mkDerivation { lib.maintainers.jayesh-bhoot ]; license = lib.licenses.mit; + mainProgram = "rescript-editor-analysis"; }; } diff --git a/pkgs/by-name/re/rescript-language-server/package.nix b/pkgs/by-name/re/rescript-language-server/package.nix new file mode 100644 index 000000000000..5e700b3c18da --- /dev/null +++ b/pkgs/by-name/re/rescript-language-server/package.nix @@ -0,0 +1,71 @@ +{ + lib, + stdenv, + buildNpmPackage, + fetchFromGitHub, + esbuild, + nix-update-script, + versionCheckHook, + rescript-editor-analysis, +}: +let + version = "1.62.0"; + + platformDir = + if stdenv.hostPlatform.isLinux then + "linux" + else if stdenv.hostPlatform.isDarwin then + "darwin" + else + throw "Unsupported system: ${stdenv.system}"; +in +buildNpmPackage rec { + pname = "rescript-language-server"; + inherit version; + + src = fetchFromGitHub { + owner = "rescript-lang"; + repo = "rescript-vscode"; + tag = version; + hash = "sha256-Tox5Qq0Kpqikac90sQww2cGr9RHlXnVy7GMnRA18CoA="; + }; + + sourceRoot = "${src.name}/server"; + npmDepsHash = "sha256-Qi41qDJ0WR0QWw7guhuz1imT51SqI7mORGjNbmZWnio="; + + strictDeps = true; + nativeBuildInputs = [ esbuild ]; + + # Tries to do funny things (install all packages for the entire repo) if you don't override it. This is just a copy paste + # from the package.json. + buildPhase = '' + runHook preBuild + + # https://github.com/rescript-lang/rescript-vscode/blob/1.62.0/.github/workflows/ci.yml#L182-L183 + mkdir analysis_binaries/${platformDir} + cp ${lib.getExe rescript-editor-analysis} analysis_binaries/${platformDir}/ + + # https://github.com/rescript-lang/rescript-vscode/blob/1.62.0/package.json#L252 + esbuild src/cli.ts --bundle --sourcemap --outfile=out/cli.js --format=cjs --platform=node --loader:.node=file --minify + + runHook postBuild + ''; + + nativeInstallCheckInputs = [ + versionCheckHook + ]; + versionCheckProgramArg = [ "--version" ]; + doInstallCheck = true; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "ReScript Language Server"; + homepage = "https://github.com/rescript-lang/rescript-vscode/tree/${version}/server"; + changelog = "https://github.com/rescript-lang/rescript-vscode/releases/tag/${version}"; + mainProgram = "rescript-language-server"; + license = lib.licenses.mit; + platforms = lib.platforms.linux ++ lib.platforms.darwin; + maintainers = [ lib.maintainers.RossSmyth ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 749d3683ca6b..7b1c49f932c3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8153,6 +8153,10 @@ with pkgs; inherit (callPackage ../development/tools/replay-io { }) replay-io replay-node-cli; + rescript-language-server = callPackage ../by-name/re/rescript-language-server/package.nix { + rescript-editor-analysis = vscode-extensions.chenglou92.rescript-vscode.rescript-editor-analysis; + }; + rnginline = with python3Packages; toPythonApplication rnginline; rr = callPackage ../development/tools/analysis/rr { };