Project Agents.md Guide#
This is a MoonBit project.
You can browse and install extra skills here:
https://github.com/moonbitlang/skills
Project Structure#
- MoonBit packages are organized per directory; each directory contains a
moon.pkg file 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.
Coding convention#
- 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.
Tooling#
moon fmtis used to format your code properly.moon ideprovides project navigation helpers likepeek-def,outline, and
find-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 .mbti changes, 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 .mbti file to see if the changes are
expected.
- Run
moon testto check tests pass. MoonBit supports snapshot testing; when
changes affect outputs, run moon test --update to 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 use moon coverage analyze > uncovered.log to
see which parts of your code are not covered by tests.