= Caveats
:experimental:

CIDER is certainly not perfect and has some limitations that everyone
should be aware of.

== ClojureScript limitations

Currently, the following features are not supported for ClojureScript
development:

* Reloading
* Running tests
* Tracing
* Debugging (check out https://github.com/clojure-emacs/cider/issues/1416[this ticket] dedicated to porting the debugger to ClojureScript)
* Enlighten

There is currently no support for both Clojure and ClojureScript evaluation in
the same nREPL session. If Piggieback is active, code evaluation and all
features will assume ClojureScript.

== Microsoft Windows

=== Line separators

On Microsoft Windows the JVM default line separator string is `\r\n`
which can appear in Emacs as `+^M+` characters at the end of lines
printed out by the JVM. One option is to set the
`buffer-display-table` to not show these characters as detailed
http://stackoverflow.com/questions/10098925/m-character-showing-in-clojure-slime-repl/11787550#11787550[here]
(changing `slime-repl-mode-hook` to
`cider-repl-mode-hook`). Alternatively, setting the system property
`line.separator` to `\n` at JVM startup will stop the carriage return
from being printed and will fix output in all cider buffers. To do so
add `"-Dline.separator=\"\n\""` to `:jvm-opts` in
`~/.lein/profiles.clj`.

=== Definition lookup in jar files

In order for source lookup commands to work with `.jar` files you'll need to
install either http://www.7-zip.org/[7zip] or `pkunzip` and add its
installation folder to Emacs's `exec-path`. Here's an example:

[source,lisp]
----
(add-to-list 'exec-path "C:/Program Files/7-Zip")
----

== powershell.el

The powershell inferior shell mode truncates CIDER's REPL output when
loaded. As a workaround remove

[source,lisp]
----
(require 'powershell)
----

from your Emacs config.

== ClojureCLR Support

CIDER currently has very basic support ClojureCLR (via Arcadia's nREPL server). The reasons for this are the following:

* nREPL itself runs only on the JVM (because it leverages Java APIs
internally). There's an
https://github.com/clojure/clr.tools.nrepl[nREPL port for ClojureCLR], but
it's not actively maintained and it doesn't behave like the Clojure nREPL.
* `cider-nrepl` uses a lot of Java code internally itself.

Those issues are not insurmountable, but are beyond the scope of our current roadmap.
If someone would like to tackle them, we'd be happy to provide assistance.

== Injecting dependencies and Leiningen pedantic: abort mode

Because injection currently creates an override of the nREPL dependency that
Leingingen also pulls in starting up the REPL will fail if `:pedantic? :abort`
is set. There are several ways to address this:

* Remove the `:pedantic? :abort` setting.
* Switch off injecting the dependencies with setting `cider-inject-dependencies-at-jack-in` to `nil` and
provide the dependencies by editing your `~/.lein/profiles.clj` as described in
the xref:basics/middleware_setup.adoc#setting-up-a-standalone-repl[standalone REPL] section.
* Adjust the value of `cider-injected-nrepl-version` to the same nREPL version as the
one that's bundled with Leiningen.

== clojure-ts-mode integration

NOTE: `clojure-ts-mode` support was introduced in CIDER 1.14.

CIDER has basic support for working with
https://github.com/clojure-emacs/clojure-ts-mode[clojure-ts-mode] buffers, but it still depends on
https://github.com/clojure-emacs/clojure-mode[clojure-mode] for certain functionality, like
extracting information about Clojure code out of the buffer. We hope to make `clojure-ts-mode` capable
of providing CIDER with all the functionality it needs to interact with Clojure buffers, but that
will take some time.

Additionally, some features like
xref:config/indentation.adoc#dynamic-indentation[`cider-dynamic-indentation`]
and xref:config/syntax_highlighting.adoc#dynamic-syntax-highlighting[`cider-font-lock-dynamically`]
are not supported by `clojure-ts-mode`.
