Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: clojure-emacs/cider-nrepl
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.28.6
Choose a base ref
...
head repository: clojure-emacs/cider-nrepl
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 5,602 additions and 28,034 deletions.
  1. +63 −96 .circleci/config.yml
  2. +27 −12 .clj-kondo/config.edn
  3. +1 −0 .gitattributes
  4. +4 −2 .github/PULL_REQUEST_TEMPLATE.md
  5. +27 −0 .github/workflows/github_release.yml
  6. +4 −0 .gitignore
  7. +398 −0 CHANGELOG.md
  8. +71 −23 Makefile
  9. +39 −49 README.md
  10. +1 −1 doc/antora.yml
  11. +17 −0 doc/cljdoc.edn
  12. +1 −0 doc/modules/ROOT/nav.adoc
  13. +7 −8 doc/modules/ROOT/pages/about/history.adoc
  14. +17 −27 doc/modules/ROOT/pages/compatibility.adoc
  15. +2 −2 doc/modules/ROOT/pages/hacking.adoc
  16. +8 −2 doc/modules/ROOT/pages/index.adoc
  17. +5 −5 doc/modules/ROOT/pages/internals.adoc
  18. +682 −145 doc/modules/ROOT/pages/nrepl-api/ops.adoc
  19. +9 −3 doc/modules/ROOT/pages/nrepl-api/supplied_middleware.adoc
  20. +14 −43 doc/modules/ROOT/pages/usage.adoc
  21. +13 −0 download-jdk-sources.sh
  22. +0 −6 eastwood.clj
  23. +10 −3 maint/cider/nrepl/impl/docs.clj
  24. +62 −65 project.clj
  25. +357 −92 src/cider/nrepl.clj
  26. +11 −0 src/cider/nrepl/middleware.clj
  27. +18 −10 src/cider/nrepl/middleware/complete.clj
  28. +152 −94 src/cider/nrepl/middleware/debug.clj
  29. +88 −13 src/cider/nrepl/middleware/info.clj
  30. +92 −77 src/cider/nrepl/middleware/inspect.clj
  31. +272 −0 src/cider/nrepl/middleware/log.clj
  32. +84 −44 src/cider/nrepl/middleware/macroexpand.clj
  33. +8 −1 src/cider/nrepl/middleware/ns.clj
  34. +2 −0 src/cider/nrepl/middleware/out.clj
  35. +38 −134 src/cider/nrepl/middleware/profile.clj
  36. +32 −102 src/cider/nrepl/middleware/refresh.clj
  37. +66 −0 src/cider/nrepl/middleware/reload.clj
  38. +6 −9 src/cider/nrepl/middleware/slurp.clj
  39. +62 −351 src/cider/nrepl/middleware/stacktrace.clj
  40. +216 −81 src/cider/nrepl/middleware/test.clj
  41. +36 −3 src/cider/nrepl/middleware/test/extensions.clj
  42. +4 −6 src/cider/nrepl/middleware/trace.clj
  43. +290 −184 src/cider/nrepl/middleware/track_state.clj
  44. +8 −1 src/cider/nrepl/middleware/util.clj
  45. +41 −33 src/cider/nrepl/middleware/util/error_handling.clj
  46. +12 −5 src/cider/nrepl/middleware/util/instrument.clj
  47. +5 −4 src/cider/nrepl/middleware/util/meta.clj
  48. +71 −0 src/cider/nrepl/middleware/util/reload.clj
  49. +2 −6 src/cider/nrepl/middleware/version.clj
  50. +22 −5 src/cider/nrepl/middleware/xref.clj
  51. +22 −17 src/cider/nrepl/pprint.clj
  52. +0 −19 src/cider/tasks.clj
  53. +3 −3 src/cider_nrepl/plugin.clj
  54. +2 −0 src/data_readers.clj
  55. +1 −1 test/clj/cider/nrepl/middleware/classpath_test.clj
  56. +13 −3 test/clj/cider/nrepl/middleware/clojuredocs_test.clj
  57. +75 −57 test/clj/cider/nrepl/middleware/complete_test.clj
  58. +4 −3 test/clj/cider/nrepl/middleware/content_type_test.clj
  59. +44 −3 test/clj/cider/nrepl/middleware/debug_integration_test.clj
  60. +3 −1 test/clj/cider/nrepl/middleware/debug_test.clj
  61. +2 −6 test/clj/cider/nrepl/middleware/format_test.clj
  62. 0 test/{spec → clj}/cider/nrepl/middleware/info_spec_test.clj
  63. +298 −363 test/clj/cider/nrepl/middleware/info_test.clj
  64. +444 −169 test/clj/cider/nrepl/middleware/inspect_test.clj
  65. +421 −0 test/clj/cider/nrepl/middleware/log_test.clj
  66. +52 −1 test/clj/cider/nrepl/middleware/macroexpand_test.clj
  67. +9 −5 test/clj/cider/nrepl/middleware/ns_test.clj
  68. +2 −0 test/clj/cider/nrepl/middleware/out_test.clj
  69. +36 −50 test/clj/cider/nrepl/middleware/profile_test.clj
  70. +2 −1 test/clj/cider/nrepl/middleware/refresh_test.clj
  71. +49 −0 test/clj/cider/nrepl/middleware/reload_test.clj
  72. +9 −13 test/clj/cider/nrepl/middleware/slurp_test.clj
  73. +1 −1 test/clj/cider/nrepl/middleware/spec_test.clj
  74. +60 −202 test/clj/cider/nrepl/middleware/stacktrace_test.clj
  75. +20 −2 test/clj/cider/nrepl/middleware/test/extensions_test.clj
  76. +168 −129 test/clj/cider/nrepl/middleware/test_test.clj
  77. +2 −2 test/clj/cider/nrepl/middleware/trace_test.clj
  78. +124 −142 test/clj/cider/nrepl/middleware/track_state_test.clj
  79. +36 −12 test/clj/cider/nrepl/middleware/util/instrument_test.clj
  80. +33 −5 test/clj/cider/nrepl/middleware/xref_test.clj
  81. +9 −0 test/clj/cider/nrepl_test.clj
  82. +11 −0 test/clj/cider/test_helpers.clj
  83. +12 −1 test/cljs/cider/nrepl/middleware/cljs_complete_test.clj
  84. +47 −76 test/cljs/cider/nrepl/middleware/cljs_inspect_test.clj
  85. +5 −3 test/cljs/cider/nrepl/middleware/cljs_ns_test.clj
  86. +2 −2 test/common/cider_nrepl/plugin_test.clj
  87. +0 −24,903 test/resources/cider/nrepl/clojuredocs/export.edn
  88. +9 −0 test/resources/failing_test_ns.clj
  89. +13 −0 test/resources/failing_test_ns_2.clj
  90. +16 −0 test/resources/logback-test.xml
  91. +59 −0 test/resources/logging.properties
  92. +4 −8 test/smoketest/project.clj
  93. +3 −3 test/smoketest/src/smoketest/core.clj
  94. +0 −61 test/spec/cider/nrepl/middleware/stacktrace_spec_test.clj
  95. +0 −5 tools-deps-testing/deps.edn
  96. +0 −6 tools-deps-testing/example.clj
  97. +0 −9 tools-deps-testing/macroexpand_tools_deps_test.clj
159 changes: 63 additions & 96 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,68 +1,43 @@
version: 2.1

######################################################################
#
# Start of general purpose config. These can plausibly go into orbs
#
######################################################################

# Default settings for executors

env_defaults: &env_defaults
LEIN_ROOT: "true" # we intended to run lein as root
# JVM_OPTS:
# - limit the maximum heap size to prevent out of memory errors
# - print stacktraces to console
JVM_OPTS: >
-Xmx3200m
-Dclojure.main.report=stderr
defaults: &defaults
working_directory: ~/repo
environment:
# - limit the maximum heap size to prevent out of memory errors
# - print stacktraces to console
JVM_OPTS: >
-Xmx3200m
-Dclojure.main.report=stderr
# Runners for various OpenJDKs versions.
# NOTE: JDK 16 can be discarded after a few months, given it's not LTS.

executors:
# JDK 8 is preferred for deployments (https://github.com/benedekfazekas/mranderson/issues/57)
# Parallelism is disabled, at least for now (https://github.com/benedekfazekas/mranderson/issues/56)
openjdk8_deploy:
jdk8:
docker:
- image: circleci/clojure:openjdk-8-lein-2.9.1-node
- image: clojure:temurin-8-lein-2.11.2-noble
<<: *defaults
environment:
LEIN_JVM_OPTS: -Dmranderson.internal.no-parallelism=true
<<: *env_defaults
openjdk8:
jdk11:
docker:
- image: circleci/clojure:openjdk-8-lein-2.9.1-node
- image: clojure:temurin-11-lein-2.11.2-noble
<<: *defaults
environment:
<<: *env_defaults
openjdk11:
jdk17:
docker:
- image: circleci/clojure:openjdk-11-lein-2.9.1-node
- image: clojure:temurin-17-lein-2.11.2-noble
<<: *defaults
environment:
<<: *env_defaults
openjdk16:
jdk21:
docker:
- image: circleci/clojure:openjdk-16-lein-2.9.5-buster-node
- image: clojure:temurin-21-lein-2.11.2-noble
<<: *defaults
environment:
<<: *env_defaults
openjdk17:
jdk24:
docker:
- image: circleci/clojure:openjdk-17-lein-2.9.5-buster-node
- image: clojure:temurin-24-lein-2.11.2-noble
<<: *defaults
environment:
<<: *env_defaults

# Runs a given set of steps, with some standard pre- and post-
# steps, including restoring of cache, saving of cache.
#
# we also install `make` here.
#
# Adapted from https://github.com/lambdaisland/meta/blob/master/circleci/clojure_orb.yml

commands:
@@ -80,65 +55,71 @@ commands:
files:
description: Files to consider when creating the cache key
type: string
default: "deps.edn project.clj build.boot"
default: "deps.edn project.clj"
cache_version:
type: string
description: "Change this value to force a cache update"
default: "1"
steps:
- run:
name: Install make
name: Install packages
command: |
sudo apt-get install make
apt-get update && apt-get install -y wget nodejs unzip zip
- run:
name: Generate Cache Checksum
command: |
for file in << parameters.files >>
do
find . -name $file -exec cat {} +
done | shasum | awk '{print $1}' > /tmp/clojure_cache_seed
done | sha256sum | awk '{print $1}' > /tmp/clojure_cache_seed
- restore_cache:
key: clojure-<< parameters.cache_version >>-{{ checksum "/tmp/clojure_cache_seed" }}
- steps: << parameters.steps >>
- save_cache:
paths:
- ~/.m2
- linux-install-1.10.3.1040.sh
- clojure-tools-1.10.3.1040.tar.gz
- .cpcache
- base-src-jdk11.zip
- base-src-jdk17.zip
- base-src-jdk21.zip
- base-src-jdk24.zip
key: clojure-<< parameters.cache_version >>-{{ checksum "/tmp/clojure_cache_seed" }}

# The jobs are relatively simple. One runs utility commands against
# latest stable JDK + Clojure, the other against specified versions

jobs:

util_job:
lint:
description: |
Running utility commands/checks (linter etc.)
Always uses Java11 and Clojure 1.10
Running linters
parameters:
steps:
type: steps
executor: openjdk11
executor: jdk21
environment:
VERSION: "1.10"
CLOJURE_VERSION: "1.12"
steps:
- checkout
- with_cache:
cache_version: "1.10"
cache_version: "lint_v3_1.12"
steps: << parameters.steps >>

deploy:
executor: openjdk8_deploy
# JDK 8 is preferred for deployments (https://github.com/benedekfazekas/mranderson/issues/57)
executor: jdk8
environment:
# Parallelism is disabled, at least for now
# (https://github.com/benedekfazekas/mranderson/issues/56)
LEIN_JVM_OPTS: -Dmranderson.internal.no-parallelism=true
steps:
- checkout
- run:
name: Deploy
command: |
lein with-profile -user,+deploy run -m deploy-release make deploy
test_code:
test:
description: |
Run tests against given version of JDK and Clojure
parameters:
@@ -150,81 +131,67 @@ jobs:
type: string
executor: << parameters.jdk_version >>
environment:
VERSION: << parameters.clojure_version >>
CLOJURE_VERSION: << parameters.clojure_version >>
JDK_SRC_VERSION: << parameters.jdk_version >>
PROJECT_VERSION: 999.99.9
steps:
- checkout
- with_cache:
cache_version: << parameters.clojure_version >>|<< parameters.jdk_version >>
cache_version: "test_code_v4_<< parameters.clojure_version >>_<< parameters.jdk_version >>"
steps:
- run:
name: Running tests with inlined deps
command: make test smoketest
- run:
name: Install the Clojure CLI
command: |
# the `nc` option skips downloading a file as already present
# (as allowed by the Circle caching).
wget -nc https://download.clojure.org/install/linux-install-1.10.3.1040.sh
sed -i 's/curl -O/wget -nc/g' linux-install-1.10.3.1040.sh
chmod +x linux-install-1.10.3.1040.sh
sudo ./linux-install-1.10.3.1040.sh
command: make --debug test
- run:
name: Running tests specific to tools.deps
command: make tools-deps-test

######################################################################
#
# End general purpose configs
#
######################################################################

name: Running smoketest
command: make --debug smoketest

# The ci-test-matrix does the following:
#
# - run tests against the target matrix
# - Java 8/11/16/...
# - Clojure 1.8, 1.9, 1.10, master
# - linter, eastwood and cljfmt

run_always: &run_always
filters:
branches:
only: /.*/
tags:
only: /.*/

workflows:
version: 2.1
ci-test-matrix:
jobs:
- test_code:
- test:
# Regular tests for all Clojure and JDK versions (except JDK21, see
# below). This matrix doesn't perform parser tests because we don't
# have JDK sources here.
matrix:
alias: "test"
parameters:
clojure_version: ["1.8", "1.9", "1.10", "1.11", "master"]
jdk_version: [openjdk8, openjdk11, openjdk16, openjdk17]
filters:
branches:
only: /.*/
tags:
only: /^v\d+\.\d+\.\d+(-alpha\d+)?$/
- util_job:
name: Code Linting
filters:
branches:
only: /.*/
tags:
only: /^v\d+\.\d+\.\d+(-alpha\d+)?$/
clojure_version: ["1.10", "1.11", "1.12"]
jdk_version: [jdk8, jdk11, jdk17, jdk21, jdk24]
<<: *run_always
- lint:
steps:
- run:
name: Running cljfmt
command: |
make cljfmt
# TODO: use `make kondo` instead once there's a fix for https://github.com/clj-kondo/clj-kondo/issues/2189
- run:
name: Running clj-kondo
command: |
make kondo
make light-kondo
- run:
name: Running Eastwood
command: |
make eastwood
<<: *run_always
- deploy:
requires:
- test_code
- "Code Linting"
- test
- lint
filters:
branches:
ignore: /.*/
39 changes: 27 additions & 12 deletions .clj-kondo/config.edn
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
{:hooks {:analyze-call {cider.nrepl.middleware.out/with-out-binding
hooks.core/with-out-binding}}
:linters {:unresolved-symbol {:exclude [(cider.nrepl/def-wrapper)
(cider.nrepl.middleware.util.instrument/definstrumenter)
(cider.nrepl.middleware.util.instrument/with-break)
(cider.nrepl.middleware.util.instrument/instrument-special-form)
(cider.nrepl.middleware.util.instrument/instrument-coll)
(cider.nrepl.print-method/def-print-method)]}
:unused-import {:level :off}
:unresolved-namespace {:exclude [clojure.main]}}
:output {:progress true
:exclude-files ["data_readers" "tasks"]}}
{:hooks {:analyze-call {cider.nrepl.middleware.out/with-out-binding
hooks.core/with-out-binding}}
:lint-as {cider.nrepl.middleware.log-test/with-each-framework clojure.core/let}
;; :exclude-files ["middleware/debug.clj"]
:linters {:unresolved-symbol {:exclude [(cider.nrepl/def-wrapper)
(cider.nrepl.middleware.util.instrument/definstrumenter)
(cider.nrepl.middleware.util.instrument/with-break)
(cider.nrepl.middleware.util.instrument/instrument-special-form)
(cider.nrepl.middleware.util.instrument/instrument-coll)
(cider.nrepl.print-method/def-print-method)
(cljs.test/is [match? thrown-match?])
(clojure.test/is [match? thrown-match?])]}
:unused-import {:level :off}
:unresolved-var {:level :off}
:unused-binding {:level :off}
:refer-all {:level :off}
:unused-namespace {:level :off}
:missing-test-assertion {:level :off}
:use {:level :off}
:redundant-let {:level :off}
:unused-private-var {:level :off}
:missing-else-branch {:level :off}
:unused-referred-var {:level :off}
:type-mismatch {:level :off}
:unresolved-namespace {:exclude [clojure.main nrepl.transport js]}}
:output {:progress true
:exclude-files ["data_readers" "tasks"]}}
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CHANGELOG.md merge=union
6 changes: 4 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -3,8 +3,10 @@ Before submitting a PR make sure the following things have been done:
- [ ] The commits are consistent with our [contribution guidelines](../blob/master/.github/CONTRIBUTING.md)
- [ ] You've added tests to cover your change(s)
- [ ] All tests are passing
- [ ] The new code is not generating reflection warnings
- [ ] You've updated the README (if adding/changing middleware)
- [ ] You've updated the README
- [ ] Middleware documentation is up to date
* Please check out and modify the `cider.nrepl` ns which has all middleware documentation.
* Run `lein docs` afterwards, and commit the results.

**Note:** If you're just starting out to hack on `cider-nrepl` you might find
[nREPL's documentation](https://nrepl.org) and the
27 changes: 27 additions & 0 deletions .github/workflows/github_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Create GitHub Release

on:
push:
tags:
- "v*" # Trigger when a version tag is pushed (e.g., v1.0.0)

jobs:
create-release:
runs-on: ubuntu-latest

permissions:
contents: write

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Create GitHub Release with Auto-Generated Notes
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: cider-nrepl ${{ github.ref_name }}
prerelease: ${{ contains(github.ref, '-rc') || contains(github.ref, '-alpha') || contains(github.ref, '-beta') }}
generateReleaseNotes: true # Auto-generate release notes based on PRs and commits
# TODO: Use bodyFile to get the contents from changelog
token: ${{ secrets.GITHUB_TOKEN }}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -11,10 +11,14 @@ out
*.class
.cljs_nashorn_repl
.inline-deps
.no-pedantic
.lein-deps-sum
.lein-failures
.lein-plugins
.lein-repl-history
.nrepl-port
.source-deps
.clj-kondo/.cache
/.no-mranderson
/test-runner
/.test-classpath
Loading