Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ proof is not a Clojure implementation, so `proof serve` understands only
a small piece of Clojure. That's enough for the snippets of the nREPL
profile, the code CIDER and vim-fireplace send when they connect and
what client tests need (output, values, errors, input, something to
interrupt), and it gives the same replies as nREPL 1.7.0 for the same
interrupt), and it gives the same replies as nREPL 1.8.0 for the same
code. Code in other languages wouldn't help, as no client's tests send
Erlang to a server.

Expand Down
6 changes: 3 additions & 3 deletions doc/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ recording every message on the way:

```shell
$ proof proxy -listen 127.0.0.1:7888 profiles/clojure.toml
Starting Clojure (nrepl/nrepl 1.7.0)...
Starting Clojure (nrepl/nrepl 1.8.0)...
Forwarding 127.0.0.1:7888 to localhost:53613. Connect your client to 127.0.0.1:7888 and press Ctrl-C when it's done.
```

Expand All @@ -238,7 +238,7 @@ client
FAIL client.need-input need-input is answered with stdin in the same session
need-input went unanswered (during connection 1): {id "2", session "dd88...", status ["need-input"]}
why: Code reading input waits until it gets some, so an unanswered need-input leaves the eval, and the session it runs in, hanging forever.
see: nREPL hands stdin to the reader of the request's session https://github.com/nrepl/nrepl/blob/edf294a7.../src/clojure/nrepl/middleware/session.clj#L380-L388
see: nREPL hands stdin to the reader of the request's session https://github.com/nrepl/nrepl/blob/16cc5cb0.../src/clojure/nrepl/middleware/session.clj#L386-L394
WARN client.close Sessions are closed before disconnecting
a session was never closed (during connection 1): {id "1", new-session "dd88...", session "d5b1...", status ["done"]}
...
Expand Down Expand Up @@ -373,7 +373,7 @@ hand (e.g. "this eval shows this output and this value") and run them
once for every scenario.

proof can't evaluate real Clojure, of course. Instead it understands just
enough of it for tests, and gives the same replies as nREPL 1.7.0 does
enough of it for tests, and gives the same replies as nREPL 1.8.0 does
for the same code:

| Code | What it does |
Expand Down
12 changes: 6 additions & 6 deletions internal/checks/refs.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const (
calvaBase = "https://github.com/BetterThanTomorrow/calva/blob/ad00dd7e518e0d08262810673111eaeddc5c2fdd/src/nrepl/index.ts"
conjureBase = "https://github.com/Olical/conjure/blob/9842bf38464df071f72546f65fa6ec44942ca7b2/fnl/conjure/client/clojure/nrepl/server.fnl"
fireplaceBase = "https://github.com/tpope/vim-fireplace/blob/5e66509599de92550762cf2681338fc4cd1e71cf/autoload/"
nreplBase = "https://github.com/nrepl/nrepl/blob/edf294a7739b99549accdb6dbbc2fc83db6d9094/src/clojure/nrepl/"
nreplBase = "https://github.com/nrepl/nrepl/blob/16cc5cb0f2adae44d389ba23c864a02eaa4e71a5/src/clojure/nrepl/"
specBase = "https://github.com/nrepl/spec.nrepl.org/blob/67796e34ac34f2f28c3af685fc3ab432fe5eb03f/spec.md"
replyBase = "https://github.com/trptcolin/reply/blob/2b28587004aa3b5cd5d4548eb87f7674eb999b13/src/reply/eval_modes/nrepl.clj"
rebelBase = "https://github.com/bhauman/rebel-readline/blob/d8573a61aad5cbbd83532e2050b6595cfb5b13bb/rebel-readline-nrepl/src/rebel_readline/nrepl/service/nrepl.clj"
Expand Down Expand Up @@ -53,8 +53,8 @@ var (
nreplNoCode = ref("nREPL no-code reply", nreplBase+"middleware/interruptible_eval.clj#L190")
nreplNsNotFound = ref("nREPL namespace-not-found reply", nreplBase+"middleware/interruptible_eval.clj#L197")
nreplEvalError = ref("nREPL eval-error reply", nreplBase+"middleware/interruptible_eval.clj#L118-L123")
nreplSessionClosed = ref("nREPL close reply", nreplBase+"middleware/session.clj#L303")
nreplUnknownSess = ref("nREPL unknown-session reply", nreplBase+"middleware/session.clj#L335")
nreplSessionClosed = ref("nREPL close reply", nreplBase+"middleware/session.clj#L309")
nreplUnknownSess = ref("nREPL unknown-session reply", nreplBase+"middleware/session.clj#L341")
nreplDescribe = ref("nREPL describe reply", nreplBase+"middleware.clj#L62-L66")
specProtocol = ref("spec: protocol description", specBase+"#L24-L56")
specDescribe = ref("spec: describe op", specBase+"#L62-L93")
Expand All @@ -64,14 +64,14 @@ var (
specClose = ref("spec: close op", specBase+"#L390-L414")
specStdin = ref("spec: stdin op", specBase+"#L186-L215")
ciderNeedInput = ref("CIDER need-input handling", ciderBase+"nrepl-client.el#L948-L950")
nreplStdinEOF = ref("nREPL treats an empty stdin as EOF", nreplBase+"middleware/session.clj#L380-L390")
nreplStdinEOF = ref("nREPL treats an empty stdin as EOF", nreplBase+"middleware/session.clj#L386-L396")

// Server code, for the client rules.
nreplReplyID = ref("nREPL copies the id into replies only if there is one", nreplBase+"misc.clj#L74")
nreplConnLoop = ref("nREPL closes a connection it can't read a request from", nreplBase+"server.clj#L83-L90")
nreplSessions = ref("nREPL keeps sessions (and their threads) until they're closed", nreplBase+"middleware/session.clj#L20-L26")
nreplInterruptNoSes = ref("nREPL can't interrupt without a session", nreplBase+"middleware/session.clj#L271-L277")
nreplStdinSession = ref("nREPL hands stdin to the reader of the request's session", nreplBase+"middleware/session.clj#L380-L388")
nreplInterruptNoSes = ref("nREPL can't interrupt without a session", nreplBase+"middleware/session.clj#L277-L283")
nreplStdinSession = ref("nREPL hands stdin to the reader of the request's session", nreplBase+"middleware/session.clj#L386-L394")
nreplLineColumn = ref("nREPL casts line and column to int", nreplBase+"middleware/interruptible_eval.clj#L42-L43")
nreplEvalNs = ref("nREPL turns ns into a symbol", nreplBase+"middleware/interruptible_eval.clj#L196")
bbUnknownID = ref("babashka.nrepl replies with id \"unknown\"", bbNreplBase+"impl/utils.clj#L13")
Expand Down
2 changes: 1 addition & 1 deletion internal/serve/eval.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ func compileError(form, format string, args ...any) error {
phase: compiling, form: form}
}

// errorReport is what nREPL 1.7.0 sends about an exception: the text for
// errorReport is what nREPL 1.8.0 sends about an exception: the text for
// err, and the classes for ex and root-ex.
func errorReport(t *thrown, ns string) (text, ex, rootEx string) {
class := "class " + t.ex.class
Expand Down
4 changes: 2 additions & 2 deletions internal/serve/matrix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func TestPresetsGetTheColumnsOfTheirServers(t *testing.T) {
noLanguage := map[string]check.Verdict{"eval.ns": S, "eval.unknown-ns": S, "cider.eval": S, "calva.eval": S,
"conjure.eval": S}
columns := map[string]map[string]check.Verdict{
"clojure": {"stdin.eof": W},
"clojure": nil,
"babashka": nil,
"clojure-clr": checktest.Merged(noJava, map[string]check.Verdict{"op.unknown-echo": W, "session.across-connections": W,
"session.isolated": F, "session.unknown": F, "session.closed": F, "stdin.need-input": S,
Expand Down Expand Up @@ -154,7 +154,7 @@ func TestPresetsMatchTheScenarios(t *testing.T) {
// but the profile of nREPL itself is named after Clojure.
server, _, _ := strings.Cut(prof.Name, " (")
if p.Name == "clojure" {
server = "nREPL 1.7.0"
server = "nREPL 1.8.0"
}
for _, s := range Scenarios() {
if slices.Contains(p.Scenarios, s.Name) && !strings.Contains(s.Who, server) {
Expand Down
2 changes: 1 addition & 1 deletion internal/serve/scenarios.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ var catalog = []scenario{
{Scenario{"ns-error", "An eval in a namespace that doesn't exist fails without namespace-not-found", "Basilisp"},
func(b *behavior) { b.nsError = true }, []string{"basilisp"}},
{Scenario{"eof-error", "Reading past the end of input fails instead of returning nil", "nREPL 1.7.0"},
func(b *behavior) { b.eofError = true }, []string{"clojure"}},
func(b *behavior) { b.eofError = true }, nil},
{Scenario{"unsorted-keys", "The keys of reply dicts aren't sorted", "jank"},
func(b *behavior) { b.unsortedKeys = true }, []string{"jank"}},
{Scenario{"byte-writes", "Replies are written a byte at a time", "any server, as TCP can deliver a message in pieces"},
Expand Down
4 changes: 2 additions & 2 deletions profiles/clojure.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# The reference implementation, nrepl/nrepl, on the Clojure CLI.
name = "Clojure (nrepl/nrepl 1.7.0)"
name = "Clojure (nrepl/nrepl 1.8.0)"
homepage = "https://github.com/nrepl/nrepl"

[launch]
command = ["clojure", "-Sdeps", "{:deps {nrepl/nrepl {:mvn/version \"1.7.0\"}}}", "-M", "-m", "nrepl.cmdline", "--port", "0"]
command = ["clojure", "-Sdeps", "{:deps {nrepl/nrepl {:mvn/version \"1.8.0\"}}}", "-M", "-m", "nrepl.cmdline", "--port", "0"]
port-pattern = 'nREPL server started on port (\d+)'
startup-timeout = "120s"

Expand Down
Loading