diff --git a/nix/buildLeanPackage.nix b/nix/buildLeanPackage.nix
index de73a1f00b..c3d449169d 100644
--- a/nix/buildLeanPackage.nix
+++ b/nix/buildLeanPackage.nix
@@ -185,15 +185,15 @@ in rec {
srcRoot = fullSrc; # use root flake.nix in case of Lean repo
inherit bash nix srcTarget srcArgs;
};
- leanpkg-dev = substituteAll {
- name = "leanpkg";
+ lake-dev = substituteAll {
+ name = "lake";
dir = "bin";
- src = ./leanpkg-dev.in;
+ src = ./lake-dev.in;
isExecutable = true;
srcRoot = fullSrc; # use root flake.nix in case of Lean repo
inherit bash nix srcTarget srcArgs;
};
- lean-dev = symlinkJoin { name = "lean-dev"; paths = [ lean-bin-dev leanpkg-dev ]; };
+ lean-dev = symlinkJoin { name = "lean-dev"; paths = [ lean-bin-dev lake-dev ]; };
emacs-dev = makeEmacsWrapper "emacs-dev" lean-dev;
vscode-dev = makeVSCodeWrapper "vscode-dev" lean-dev;
})
diff --git a/nix/leanpkg-dev.in b/nix/lake-dev.in
similarity index 83%
rename from nix/leanpkg-dev.in
rename to nix/lake-dev.in
index 406af6cc11..a6bfe320f4 100644
--- a/nix/leanpkg-dev.in
+++ b/nix/lake-dev.in
@@ -2,7 +2,7 @@
set -euo pipefail
-[[ $# -gt 0 && "$1" == print-paths ]] || { echo 'This is just a simple Nix adapter for `leanpkg print-paths`. Please use the `lean-all` attribute for the real thing.'; exit 1; }
+[[ $# -gt 0 && "$1" == print-paths ]] || { echo 'This is just a simple Nix adapter for `lake print-paths`. Please use the `lean-all` attribute for the real thing.'; exit 1; }
shift
deps="$@"
root=.
diff --git a/src/Lean/Server/FileWorker.lean b/src/Lean/Server/FileWorker.lean
index 2a34bb15e7..43b91624c4 100644
--- a/src/Lean/Server/FileWorker.lean
+++ b/src/Lean/Server/FileWorker.lean
@@ -117,31 +117,31 @@ abbrev WorkerM := ReaderT WorkerContext <| StateRefT WorkerState IO
/- Worker initialization sequence. -/
section Initialization
- /-- Use `leanpkg print-paths` to compile dependencies on the fly and add them to `LEAN_PATH`.
+ /-- Use `lake print-paths` to compile dependencies on the fly and add them to `LEAN_PATH`.
Compilation progress is reported to `hOut` via LSP notifications. Return the search path for
source files. -/
- partial def leanpkgSetupSearchPath (leanpkgPath : System.FilePath) (m : DocumentMeta) (imports : Array Import) (hOut : FS.Stream) : IO SearchPath := do
- let leanpkgProc ← Process.spawn {
+ partial def lakeSetupSearchPath (lakePath : System.FilePath) (m : DocumentMeta) (imports : Array Import) (hOut : FS.Stream) : IO SearchPath := do
+ let lakeProc ← Process.spawn {
stdin := Process.Stdio.null
stdout := Process.Stdio.piped
stderr := Process.Stdio.piped
- cmd := leanpkgPath.toString
+ cmd := lakePath.toString
args := #["print-paths"] ++ imports.map (toString ·.module)
}
-- progress notification: report latest stderr line
let rec processStderr (acc : String) : IO String := do
- let line ← leanpkgProc.stderr.getLine
+ let line ← lakeProc.stderr.getLine
if line == "" then
return acc
else
publishDiagnostics m #[{ range := ⟨⟨0, 0⟩, ⟨0, 0⟩⟩, severity? := DiagnosticSeverity.information, message := line }] hOut
processStderr (acc ++ line)
let stderr ← IO.asTask (processStderr "") Task.Priority.dedicated
- let stdout := String.trim (← leanpkgProc.stdout.readToEnd)
+ let stdout := String.trim (← lakeProc.stdout.readToEnd)
let stderr ← IO.ofExcept stderr.get
- if (← leanpkgProc.wait) == 0 then
+ if (← lakeProc.wait) == 0 then
if stdout.isEmpty then
- pure [] -- e.g. no leanpkg.toml
+ pure [] -- e.g. no lakefile.lean
else
-- ignore any output up to the last line
-- TODO: leanpkg should instead redirect nested stdout output to stderr
@@ -155,25 +155,29 @@ section Initialization
searchPathRef.set sp
paths.srcPath.mapM realPathNormalized
else
- throwServerError s!"`leanpkg print-paths` failed:\n{stdout}\nstderr:\n{stderr}"
+ throwServerError s!"`{lakePath} print-paths` failed:\n{stdout}\nstderr:\n{stderr}"
def compileHeader (m : DocumentMeta) (hOut : FS.Stream) (opts : Options) : IO (Snapshot × SearchPath) := do
let inputCtx := Parser.mkInputContext m.text.source ""
let (headerStx, headerParserState, msgLog) ← Parser.parseHeader inputCtx
- let leanpkgPath ← match (← IO.getEnv "LEAN_SYSROOT") with
- | some path => pure <| System.FilePath.mk path / "bin" / "leanpkg"
- | _ => pure <| (← appDir) / "leanpkg"
- let leanpkgPath := leanpkgPath.withExtension System.FilePath.exeExtension
+ let lakePath :=
+ -- backward compatibility, kill when `leanpkg` is removed
+ if (← System.FilePath.pathExists "leanpkg.toml") && !(← System.FilePath.pathExists "lakefile.lean") then "leanpkg"
+ else "lake"
+ let lakePath ← match (← IO.getEnv "LEAN_SYSROOT") with
+ | some path => pure <| System.FilePath.mk path / "bin" / lakePath
+ | _ => pure <| (← appDir) / lakePath
+ let lakePath := lakePath.withExtension System.FilePath.exeExtension
let mut srcSearchPath := [(← appDir) / ".." / "lib" / "lean" / "src"]
if let some p := (← IO.getEnv "LEAN_SRC_PATH") then
srcSearchPath := srcSearchPath ++ System.SearchPath.parse p
let (headerEnv, msgLog) ← try
- -- NOTE: leanpkg does not exist in stage 0 (yet?)
- if (← System.FilePath.pathExists leanpkgPath) then
- let pkgSearchPath ← leanpkgSetupSearchPath leanpkgPath m (Lean.Elab.headerToImports headerStx).toArray hOut
+ -- NOTE: lake does not exist in stage 0 (yet?)
+ if (← System.FilePath.pathExists lakePath) then
+ let pkgSearchPath ← lakeSetupSearchPath lakePath m (Lean.Elab.headerToImports headerStx).toArray hOut
srcSearchPath := srcSearchPath ++ pkgSearchPath
Elab.processHeader headerStx opts msgLog inputCtx
- catch e => -- should be from `leanpkg print-paths`
+ catch e => -- should be from `lake print-paths`
let msgs := MessageLog.empty.add { fileName := "", pos := ⟨0, 0⟩, data := e.toString }
pure (← mkEmptyEnvironment, msgs)
let cmdState := Elab.Command.mkState headerEnv msgLog opts