status-mobile/doc/ide-setup.md

5.8 KiB

Setup your Editor/IDE

You can use any Clojure enabled editor. Here are instructions for developing the status-mobile app using:

  • IntelliJ IDEA and Cursive
  • VS Code and Calva
  • Emacs/Cider

(Please add instructions for your favorite editor.)

Table of Contents

Using Cursive

Install Cursive

See https://cursive-ide.com/userguide/index.html

Getting Cursive to understand status-mobile

I get a lot of cannot be resolved

Are you getting problems where you get a lot of cannot be resolved on everything?

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:

This will load the following menu:

Click on the + icon in the top left corner of the menu.

Select Clojure REPL > Remote

Which will load the following menu

Enter the below options:

  • Name = status-mobile
  • Display Name = status-mobile
  • Connection type = nREPL
  • Connection details
    • Host = 127.0.0.1
    • Port = 7888

Press OK

Now the below option will be visible. Press the green run button

You should now see an dialog with the following message:

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:

(prn 1)

Which should output

(prn 1)
1
=> nil

See below:

Connecting REPL and IntelliJ to status-mobile

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 / make run-android

See the STARTING GUIDE for details

Next go back to the REPL input and enter the following commands:

(shadow/watch :mobile)
(shadow/repl :mobile)

See Below

Which should switch the clj file type target to cljs as shown above

Finally you are ready to test REPL.

Create a sample function to evaluate something simple like (prn "I'm working"), move your cursor to one of the outer parentheses. Right or control click and select the REPL option. From there select Sync files in REPL and then Send '...' to REPL'.

Alternatively you can use the shortcut commands ⇧⌘M to sync your files and ⇧⌘P to send the statement to REPL. You may also need to switch the REPL namespace to match the current file, which can be done manually from the dialogue box or using the ⇧⌘N shortcut key.

Following the above should give you the below result:

🎉 Tada! Working! 🎉


For additional details on issues you may face when setting up REPL with Cursive see this document

Using Calva

For VS Code users.

  1. Install Calva.

Start and connect the REPL

  1. Open the status-mobile folder.
  2. Start Status development (Starting the run-clojure and run-metro jobs in split view in the VS Code integrated terminal works great.)
  3. Run the VS Code command: Calva: Connect to a running REPL Server in the project
    1. Select the project type shadow-cljs
    2. Accept the suggested connection host:port
    3. Select to connect to the :mobile build

Use the REPL

Open any .cljs file in the project and evaluate forms in it. See https://calva.io/try-first/ for some starter tips and links. Confirm that your REPL is connected to the app by evaluating:

(js/alert "Hello from Status App!")

🎉 Tada! You are ready to use the REPL to improve Status.im! 🎉

Please consider bookmarking calva.io for quick access to the Calva documentation.

Using Emacs/Cider

  1. Install Emacs/Cider/etc. (there is a lot of variability in how to manage things in emacs, so please google for help with this)
  2. Add a local ~/.shadow-cljs/config.edn file like below (corresponding to the version numbers of the packages you are using):
{:dependencies
 [[nrepl/nrepl "0.9.0"]
  [cider/cider-nrepl "0.28.4"]
  [cider/piggieback "0.5.2"]]}