This PR adds per-package server options to resolve #2455. It is based on the previous work in #2456, but takes a different approach: options are loaded for the specific file in the file worker when `print-paths` is called, instead of loading them in the watchdog with a separate Lake command. This change addresses review comments made in #2456. In doing so, it introduces two new Lake config fields: - `leanOptions`: `-D` flag options that are passed to both the language server and `lean` when building. - `moreServerOptions`: `-D` flag options that are passed to the language server. Since `print-paths` must also accept a file path to compute the options for that file, this PR is changing the API for `print-paths`. As there have been numerous complaints about the name `print-paths`, I also decided to change it to `setup-file` in this PR, since it would break compatibility with the old Lake API anyways. This PR deprecates the Lakefile field `moreServerArgs` in favor of `moreGlobalServerArgs`, as suggested in the review for #2456. Fixes #2455 --------- Co-authored-by: digama0 <mcarneir@andrew.cmu.edu>
181 lines
9.7 KiB
Text
181 lines
9.7 KiB
Text
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 0, "character": 20}}
|
||
{"rendered": "```lean\nα : Sort ?u\n⊢ α → α\n```",
|
||
"goals": ["α : Sort ?u\n⊢ α → α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 0, "character": 21}}
|
||
{"rendered": "```lean\nα : Sort ?u\n⊢ α → α\n```",
|
||
"goals": ["α : Sort ?u\n⊢ α → α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 3, "character": 2}}
|
||
{"rendered": "```lean\nα : Sort ?u\n⊢ α → α\n```",
|
||
"goals": ["α : Sort ?u\n⊢ α → α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 3, "character": 3}}
|
||
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
|
||
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 7, "character": 3}}
|
||
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
|
||
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 10, "character": 20}}
|
||
{"rendered": "```lean\nα : Sort ?u\n⊢ α → α\n```",
|
||
"goals": ["α : Sort ?u\n⊢ α → α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 15, "character": 9}}
|
||
{"rendered": "```lean\ncase zero\n⊢ 0 + Nat.zero = Nat.zero\n```",
|
||
"goals": ["case zero\n⊢ 0 + Nat.zero = Nat.zero"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 17, "character": 5}}
|
||
{"rendered":
|
||
"```lean\ncase succ\nn✝ : Nat\nn_ih✝ : 0 + n✝ = n✝\n⊢ 0 + Nat.succ n✝ = Nat.succ n✝\n```",
|
||
"goals":
|
||
["case succ\nn✝ : Nat\nn_ih✝ : 0 + n✝ = n✝\n⊢ 0 + Nat.succ n✝ = Nat.succ n✝"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 21, "character": 9}}
|
||
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
|
||
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 21, "character": 10}}
|
||
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
|
||
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 21, "character": 11}}
|
||
{"rendered": "```lean\nα : Sort ?u\na : α\n⊢ α\n```",
|
||
"goals": ["α : Sort ?u\na : α\n⊢ α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 27, "character": 3}}
|
||
{"rendered": "```lean\nn m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = n\n```",
|
||
"goals": ["n m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = n"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 27, "character": 9}}
|
||
{"rendered": "```lean\nn m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = m\n```",
|
||
"goals": ["n m : Nat\nh1 : n = m\nh2 : m = 0\n⊢ 0 = m"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 27, "character": 13}}
|
||
{"rendered": "no goals", "goals": []}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 34, "character": 3}}
|
||
{"rendered": "```lean\ncase zero\n⊢ 0 + Nat.zero = Nat.zero\n```",
|
||
"goals": ["case zero\n⊢ 0 + Nat.zero = Nat.zero"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 40, "character": 3}}
|
||
{"rendered":
|
||
"```lean\ncase zero\n⊢ 0 + Nat.zero = Nat.zero\n```\n---\n```lean\ncase succ\nn✝ : Nat\nn_ih✝ : 0 + n✝ = n✝\n⊢ 0 + Nat.succ n✝ = Nat.succ n✝\n```",
|
||
"goals":
|
||
["case zero\n⊢ 0 + Nat.zero = Nat.zero",
|
||
"case succ\nn✝ : Nat\nn_ih✝ : 0 + n✝ = n✝\n⊢ 0 + Nat.succ n✝ = Nat.succ n✝"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 44, "character": 3}}
|
||
{"rendered":
|
||
"```lean\ncase zero\n⊢ 0 + Nat.zero = Nat.zero\n```\n---\n```lean\ncase succ\nn✝ : Nat\n⊢ 0 + Nat.succ n✝ = Nat.succ n✝\n```",
|
||
"goals":
|
||
["case zero\n⊢ 0 + Nat.zero = Nat.zero",
|
||
"case succ\nn✝ : Nat\n⊢ 0 + Nat.succ n✝ = Nat.succ n✝"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 48, "character": 3}}
|
||
{"rendered": "```lean\na b : Nat\n⊢ a = b\n```",
|
||
"goals": ["a b : Nat\n⊢ a = b"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 51, "character": 20}}
|
||
{"rendered": "```lean\nα : Sort ?u\n⊢ α → α\n```",
|
||
"goals": ["α : Sort ?u\n⊢ α → α"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 55, "character": 3}}
|
||
{"rendered":
|
||
"```lean\nα : Sort ?u\np : α → Prop\na b : α\ninst✝ : DecidablePred p\nh : ∀ {p : α → Prop} [inst : DecidablePred p], p a → p b\n⊢ p a\n```",
|
||
"goals":
|
||
["α : Sort ?u\np : α → Prop\na b : α\ninst✝ : DecidablePred p\nh : ∀ {p : α → Prop} [inst : DecidablePred p], p a → p b\n⊢ p a"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 61, "character": 3}}
|
||
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 63, "character": 3}}
|
||
{"rendered": "```lean\ncase right\n⊢ False\n```",
|
||
"goals": ["case right\n⊢ False"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 68, "character": 3}}
|
||
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 70, "character": 3}}
|
||
{"rendered": "```lean\ncase right\n⊢ False\n```",
|
||
"goals": ["case right\n⊢ False"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 78, "character": 29}}
|
||
{"rendered":
|
||
"```lean\nt a n✝ : Nat\nn_ih✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + t * Nat.succ n✝\n```\n---\n```lean\nt a n✝ : Nat\nn_ih✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)\n```\n---\n```lean\nt a n✝ : Nat\nn_ih✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)\n```",
|
||
"goals":
|
||
["t a n✝ : Nat\nn_ih✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + t * Nat.succ n✝",
|
||
"t a n✝ : Nat\nn_ih✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)",
|
||
"t a n✝ : Nat\nn_ih✝ : t * (a + n✝) = t * a + t * n✝\n⊢ t * (a + n✝) + t = t * a + (t * n✝ + t)"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 82, "character": 53}}
|
||
{"rendered":
|
||
"```lean\ncase nil\nα : Type ?u\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)\n```",
|
||
"goals":
|
||
["case nil\nα : Type ?u\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 82, "character": 54}}
|
||
{"rendered":
|
||
"```lean\ncase nil\nα : Type ?u\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)\n```",
|
||
"goals":
|
||
["case nil\nα : Type ?u\nbs cs : List α\n⊢ [] ++ bs ++ cs = [] ++ (bs ++ cs)"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 86, "character": 38}}
|
||
{"rendered": "no goals", "goals": []}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 89, "character": 39}}
|
||
null
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 93, "character": 16}}
|
||
{"rendered":
|
||
"```lean\ncase left\n⊢ True\n```\n---\n```lean\ncase right\n⊢ False\n```",
|
||
"goals": ["case left\n⊢ True", "case right\n⊢ False"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 97, "character": 8}}
|
||
{"rendered": "```lean\n| True = True\n```", "goals": ["| True = True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 99, "character": 4}}
|
||
{"rendered": "```lean\n| True = True\n```", "goals": ["| True = True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 101, "character": 2}}
|
||
{"rendered": "no goals", "goals": []}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 106, "character": 4}}
|
||
{"rendered": "```lean\n⊢ True\n```", "goals": ["⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 108, "character": 2}}
|
||
{"rendered": "```lean\n⊢ True\n```", "goals": ["⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 113, "character": 4}}
|
||
{"rendered": "```lean\n⊢ True\n```", "goals": ["⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 115, "character": 2}}
|
||
null
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 120, "character": 2}}
|
||
{"rendered": "```lean\n⊢ False\n```", "goals": ["⊢ False"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 124, "character": 17}}
|
||
{"rendered": "```lean\np q : Prop\nhp : p\nhq : q\nthis : q ∧ p\n⊢ p ∧ q\n```",
|
||
"goals": ["p q : Prop\nhp : p\nhq : q\nthis : q ∧ p\n⊢ p ∧ q"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 128, "character": 18}}
|
||
{"rendered": "```lean\np q : Prop\nhp : p\nhq : q\n⊢ id (p ∧ q)\n```",
|
||
"goals": ["p q : Prop\nhp : p\nhq : q\n⊢ id (p ∧ q)"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 133, "character": 3}}
|
||
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 133, "character": 4}}
|
||
{"rendered": "```lean\ncase left\n⊢ True\n```", "goals": ["case left\n⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 139, "character": 34}}
|
||
{"rendered": "```lean\nx✝ : Nat\n⊢ True\n```", "goals": ["x✝ : Nat\n⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 142, "character": 34}}
|
||
{"rendered": "```lean\nx✝ : Nat\n⊢ True\n```", "goals": ["x✝ : Nat\n⊢ True"]}
|
||
{"textDocument": {"uri": "file:///plainGoal.lean"},
|
||
"position": {"line": 145, "character": 34}}
|
||
{"rendered": "```lean\nx✝ : Nat\n⊢ True\n```", "goals": ["x✝ : Nat\n⊢ True"]}
|