anki/docs/editing.md
Damien Elmes 95dbf30fb9 updates to the build process and binary bundles
All platforms:

- rename scripts/ to tools/: Bazelisk expects to find its wrapper script
(used by the Mac changes below) in tools/. Rather than have a separate
scripts/ and tools/, it's simpler to just move everything into tools/.
- wheel outputs and binary bundles now go into .bazel/out/dist. While
not technically Bazel build products, doing it this way ensures they get
cleaned up when 'bazel clean' is run, and it keeps them out of the source
folder.
- update to the latest Bazel

Windows changes:

- bazel.bat has been removed, and tools\setup-env.bat has been added.
Other scripts like .\run.bat will automatically call it to set up the
environment.
- because Bazel is now on the path, you can 'bazel test ...' from any
folder, instead of having to do \anki\bazel.
- the bat files can handle being called from any working directory,
so things like running "\anki\tools\python" from c:\ will work.
- build installer as part of bundling process

Mac changes:

- `arch -arch x86_64 bazel ...` will now automatically use a different
build root, so that it is cheap to switch back and forth between archs
on a new Mac.
- tools/run-qt* will now automatically use Rosetta
- disable jemalloc in Mac x86 build for now, as it won't build under
Rosetta (perhaps due to its build scripts using $host_cpu instead of
$target_cpu)
- create app bundle as part of bundling process

Linux changes:

- remove arm64 orjson workaround in Linux bundle, as without a
readily-available, relatively distro-agonstic PyQt/Qt build
we can use, the arm64 Linux bundle is of very limited usefulness.
- update Docker files for release build
- include fcitx5 in both the qt5 and qt6 bundles
- create tarballs as part of the bundling process
2022-02-10 19:23:07 +10:00

2.0 KiB

Editing/IDEs

Visual Studio Code is recommended, since it provides decent support for all the languages Anki uses. If you open the root of this repo in VS Code, it will suggest some extensions for you to install.

For editing Python, PyCharm/IntelliJ's type checking/completion is a bit nicer than VS Code, but VS Code has improved considerably in a short span of time.

There are a few steps you'll want to take before you start using an IDE.

Initial Setup

Python Environment

For code completion of external Python modules, you'll need to create a Python venv and install Anki's dependencies into it. For example:

$ python3.9 -m venv ~/pyenv
$ ~/pyenv/bin/pip install -r python/requirements.txt
$ ~/pyenv/bin/pip install pyqt6 pyqt6-webengine

After doing so, you can set your editor's Python path to ~/pyenv/bin/python, eg in VS Code, ctrl/cmd+shift+p, then 'python: select interpreter'.

Rust

If you're planning to edit Rust code, install Rustup, then run 'rustup install nightly'.

Build First

Code completion partly depends on files that are generated as part of the regular build process, so for things to work correctly, use './run' or 'tools/build' prior to using code completion.

PyCharm/IntelliJ

If you decide to use PyCharm instead of VS Code, there are somethings to be aware of.

Slowdowns

The build process links a large file tree into .bazel in the repo dir. JetBrains products will try to monitor this folder for changes, and index the files inside it, which will lead to bad performance. Excluding the folder in the project settings is not sufficient unfortunately.

A workaround is to add .bazel and node_modules to the IDE-global ignores: https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000721750-Excluding-directories-globally

Pylib References

You'll need to use File>Project Structure to tell IntelliJ that pylib/ is a sources root, so it knows references to 'anki' in aqt are valid.