This is a MoonBit project.
For AI-generated Qt binding code, also follow AI_BINDING_GUIDE.md.
You can browse and install extra skills here: https://github.com/moonbitlang/skills
-
MoonBit packages are organized per directory; each directory contains a
moon.pkgfile listing its dependencies. Each package has its files and blackbox test files (ending in_test.mbt) and whitebox test files (ending in_wbtest.mbt). -
In the toplevel directory, there is a
moon.mod.jsonfile listing module metadata.
-
MoonBit code is organized in block style, each block is separated by
///|, the order of each block is irrelevant. In some refactorings, you can process block by block independently. -
Try to keep deprecated blocks in file called
deprecated.mbtin each directory.
-
moon fmtis used to format your code properly. -
moon ideprovides project navigation helpers likepeek-def,outline, andfind-references. See $moonbit-agent-guide for details. -
moon infois used to update the generated interface of the package, each package has a generated interface file.mbti, it is a brief formal description of the package. If nothing in.mbtichanges, this means your change does not bring the visible changes to the external package users, it is typically a safe refactoring. -
In the last step, run
moon info && moon fmtto update the interface and format the code. Check the diffs of.mbtifile to see if the changes are expected. -
Run
moon testto check tests pass. MoonBit supports snapshot testing; when changes affect outputs, runmoon test --updateto refresh snapshots. -
Prefer
assert_eqorassert_true(pattern is Pattern(...))for results that are stable or very unlikely to change. Use snapshot tests to record current behavior. For solid, well-defined results (e.g. scientific computations), prefer assertion tests. You can usemoon coverage analyze > uncovered.logto see which parts of your code are not covered by tests.