-
Notifications
You must be signed in to change notification settings - Fork 135
Knowledge Nuggets
This page contains snippets of useful knowledge and tips related to Ballistica development. Feel free to add your own here or upvote existing ones by incrementing the 👍 count next to them (just once per tip please). I will use upvote counts to help organize the tips by usefulness.
When using Mypy to perform static type-checking on Python code, one of the most basic and important things to be able to do is determine what type Mypy understands a variable to be.
Say we have the following code:
value = some_mysterious_function()How do we know what type Mypy thinks 'value' is? We can guess this ourself by looking up the definition of some_mysterious_function(), but it is often better to be sure and just ask Mypy directly. We can do that by adding the following 'fake' function call to our code which is understood by Mypy:
value = some_mysterious_function()
reveal_type(value)Now we can run make mypy from the project root, and we should see output such as this:
Running Mypy (incremental)...
path/to/this/python_script.py:45: note: Revealed type is 'builtins.int'
Mypy: fail.
make: *** [mypy] Error 255
Ok, it looks like it's understood to be an int. Good to know! Now if we try to add code such as value += 'foo' Mypy will kindly inform us that ints and strings cannot be added; otherwise this error could go unnoticed until the next time we run the code. Hooray for type safety!
Be sure to remove the reveal_type() line when you are done with it, otherwise the code will error at runtime due to that not being an actual Python function.
👍0
Ballistica's main Makefile is set up to list info about its available targets when you simply type make or make help.
However, it can also be handy to set up your shell to allow autocompleting target names. If you are using zsh (the default on Mac as of 10.15 Catalina), you can add this to your .zshrc file to enable it:
autoload -U compinit
compinit
Once you restart your shell, you should be able to type something like make prefab- and hit tab to see a list of all matching targets.
ericf@MacBook-Fro ballistica % make prefab-
prefab-debug prefab-mac-release
prefab-debug-build prefab-mac-release-build
prefab-linux-debug prefab-release
prefab-linux-debug-build prefab-release-build
prefab-linux-release prefab-windows-debug
prefab-linux-release-build prefab-windows-debug-build
prefab-mac-debug prefab-windows-release
prefab-mac-debug-build prefab-windows-release-build
The same functionality should be possible with other shells such as bash, but I will leave that as an exercise for the user (feel free to expand this tip).
👍0
ballistica.net • discord • blog • support