status-mobile/doc/IDE_SETUP.md

170 lines
4.7 KiB
Markdown
Raw Normal View History

# Using IntelliJ IDEA and Cursive
## Install Cursive
See https://cursive-ide.com/userguide/index.html
## Getting Cursive to understand `status-react`
- Add this file to the root of the `status-react` project dir
- https://gist.github.com/Samyoul/f71a0593ba7a12d24dd0d5ef986ebbec
- Right click and "add as leiningen project"
![](https://notes.status.im/uploads/upload_32ea1a8eeb410effc24b5f3914e38627.png)
## I get a lot of `cannot be resolved`
Are you getting problems where you get a lot of `cannot be resolved` on everything?
![](https://notes.status.im/uploads/upload_73ed33ce7af35a289c88afdb01fc91b7.jpg)
See https://cursive-ide.com/userguide/macros.html
- opt+enter (on macOS)
- resolve defview as fn and letsubs as let
- move selection on resolve and hit enter
- and select defn for defview and let for letsubs
## REPL!
### Connecting to REPL to IntelliJ
I had a number of problems connecting to REPL, the solution is as follows:
At the top of IntelliJ IDEA click on the `Add Configuration...` option:
![](https://notes.status.im/uploads/upload_b16dd48e03ef4cc98c53cc896a532f90.png)
This will load the following menu:
![](https://notes.status.im/uploads/upload_0f50285b745a00cfe3cab3c4af415d21.png)
Click on the `+` icon in the top left corner of the menu.
Select `Clojure REPL > Remote`
![](https://notes.status.im/uploads/upload_0d890d5ed6e2d8d48d31cab7fa99d9e9.png)
Which will load the following menu
![](https://notes.status.im/uploads/upload_563dce472426f1f691a55713556a9b36.png)
Enter the below options:
- Name = status-react
- Display Name = status-react
- Connection type = nREPL
- Connection details
- Host = 127.0.0.1
- Port = 7888
![](https://notes.status.im/uploads/upload_88ed1d279c314d2264405f15a5e56433.png)
Press `OK`
Now the below option will be visible.
Press the green run button
![](https://notes.status.im/uploads/upload_d3c538110f5cc21770311b288ac382d7.png)
You should now see an dialog with the following message:
```shell
Connecting to remote nREPL server...
Clojure 1.10.1
```
To confirm you have a working connection with REPL enter the following command in the input box below the output:
```shell
(prn 1)
```
Which should output
```shell
(prn 1)
1
=> nil
```
Or
```shell
prn 1
```
Which should output
```shell
prn 1
=> 1
=> #function[clojure.core/prn]
```
See below:
![](https://notes.status.im/uploads/upload_0f39b27d0ad287db7a5f1f180f9c55b5.png)
### Connecting REPL and IntelliJ to `status-react`
**The important next step is telling REPL the context in which to interact with the code.**
Do the following:
Ensure you have 3 terminals running the following
- `make run-clojure`
- `make run-metro`
- `make run-ios`
// TODO Add the details of selecting the
```clojure
(shadow/watch :mobile)
(shadow/repl :mobile)
```
- switch clj to cljs
- You do need to switch it manually
### Connecting Cursive / IntelliJ IDEA to REPL Problems
I can connect to REPL inside the IDE, but the code doesn't seem to be able to send to REPL. But when trying to load any code into REPL I get a `Cannot load Clojure form into ClojureScript REPL`.
My process:
Open IDEA, not yet connected to REPL and not running a terminal with `make run-clojure`.
![](https://notes.status.im/uploads/upload_a2abb27acbee62a0ca9ffdc41d2219dc.png)
Attempting to connect to REPL without `make run-clojure` gives the expected error. After a terminal is running `make run-clojure`, connection works fine.
Entering simple functions gives a response.
![](https://notes.status.im/uploads/upload_9b2848993feb4181ad8fee96fc0dd6e9.png)
However trying to do any thing REPL-ly with the code always gives a "*Cannot load Clojure form into ClojureScript REPL*" error.
![](https://notes.status.im/uploads/upload_d29b3ded54afdfddf0a2cb09bfdbd121.png)
![](https://notes.status.im/uploads/upload_c07a7805e1e7c954e3d3698063410bb5.png)
---
### Things I've also tried
I've done some Googling to see what could be going wrong.
https://github.com/cursive-ide/cursive/issues/1285 This issue suggests switching the file to `cljc` which I did out of curiosity, it connects better but it doesn't really work.
![](https://notes.status.im/uploads/upload_79bca0edc0c1841a7cbdcec50a4f90eb.png)
Obviously this isn't ideal even if it worked perfectly, I presume that the file types are important and converting them back and forth is a terrible work flow.
I tried converting the files to `clj`, just to see if that helped, which gave an interesting error:
```bash=
Loading src/status_im/reloader.clj...
Syntax error (FileNotFoundException) compiling at (src/status_im/reloader.clj:1:1).
Could not locate status_im/ui/components/react__init.class, status_im/ui/components/react.clj or status_im/ui/components/react.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.
```