* Use Static[] for static inheritance * Support .seq extension * Fix #36 * Polymorphic typechecking; vtables [wip] * v-table dispatch [wip] * vtable routing [wip; bug] * vtable routing [MVP] * Fix texts * Add union type support * Update FAQs * Clarify * Add BSL license * Add makeUnion * Add IR UnionType * Update union representation in LLVM * Update README * Update README.md * Update README * Update README.md * Add benchmarks * Add more benchmarks and README * Add primes benchmark * Update benchmarks * Fix cpp * Clean up list * Update faq.md * Add binary trees benchmark * Add fannkuch benchmark * Fix paths * Add PyPy * Abort on fail * More benchmarks * Add cpp word_count * Update set_partition cpp * Add nbody cpp * Add TAQ cpp; fix word_count timing * Update CODEOWNERS * Update README * Update README.md * Update CODEOWNERS * Fix bench script * Update binary_trees.cpp * Update taq.cpp * Fix primes benchmark * Add mandelbrot benchmark * Fix OpenMP init * Add Module::unsafeGetUnionType * UnionType [wip] [skip ci] * Integrate IR unions and Union * UnionType refactor [skip ci] * Update README.md * Update docs * UnionType [wip] [skip ci] * UnionType and automatic unions * Add Slack * Update faq.md * Refactor types * New error reporting [wip] * New error reporting [wip] * peglib updates [wip] [skip_ci] * Fix parsing issues * Fix parsing issues * Fix error reporting issues * Make sure random module matches Python * Update releases.md * Fix tests * Fix #59 * Fix #57 * Fix #50 * Fix #49 * Fix #26; Fix #51; Fix #47; Fix #49 * Fix collection extension methods * Fix #62 * Handle *args/**kwargs with Callable[]; Fix #43 * Fix #43 * Fix Ptr.__sub__; Fix polymorphism issues * Add typeinfo * clang-format * Upgrade fmtlib to v9; Use CPM for fmtlib; format spec support; __format__ support * Use CPM for semver and toml++ * Remove extension check * Revamp str methods * Update str.zfill * Fix thunk crashes [wip] [skip_ci] * Fix str.__reversed__ * Fix count_with_max * Fix vtable memory allocation issues * Add poly AST tests * Use PDQsort when stability does not matter * Fix dotted imports; Fix issues * Fix kwargs passing to Python * Fix #61 * Fix #37 * Add isinstance support for unions; Union methods return Union type if different * clang-format * Nicely format error tracebacks * Fix build issues; clang-format * Fix OpenMP init * Fix OpenMP init * Update README.md * Fix tests * Update license [skip ci] * Update license [ci skip] * Add copyright header to all source files * Fix super(); Fix error recovery in ClassStmt * Clean up whitespace [ci skip] * Use Python 3.9 on CI * Print info in random test * Fix single unions * Update random_test.codon * Fix polymorhic thunk instantiation * Fix random test * Add operator.attrgetter and operator.methodcaller * Add code documentation * Update documentation * Update README.md * Fix tests * Fix random init Co-authored-by: A. R. Shajii <ars@ars.me>
2.5 KiB
Contributing to Codon
Thank you for considering contributing to Codon! This document contains some helpful information for getting started. The best place to ask questions or get feedback is our Slack.
Development workflow
All development is done on the develop
branch. Just before release,
we bump the version number, merge into master
and tag the build with
a tag of the form vX.Y.Z
where X
, Y
and Z
are the SemVer major, minor and patch numbers,
respectively. Our CI build process automatically builds and deploys tagged commits as a new GitHub release.
Coding standards
All C++ code should be formatted with ClangFormat using the .clang-format
file in the root of the repository.
Writing tests
Tests are written as Codon programs. The test/core/
directory
contains some examples. If you add a new test file, be sure to add it to
test/main.cpp
so that it will be executed as part of the test
suite. There are two ways to write tests for Codon:
New style
Example:
@test
def my_test():
assert 2 + 2 == 4
my_test()
Semantics: assert
statements in functions marked @test
are not compiled to standard assertions: they don't terminate
the program when the condition fails, but instead print source information, fail the test, and move on.
Old style
Example:
print(2 + 2) # EXPECT: 4
Semantics: The source file is scanned for EXPECT
s, executed, then the output is compared to the "expected" output. Note
that if you have, for example, an EXPECT
in a loop, you will need to duplicate it however many times the loop is executed.
Using EXPECT
is helpful mainly in cases where you need to test control flow, otherwise prefer the new style.
Pull requests
Pull requests should generally be based on the develop
branch. Before submitting a pull request, please make sure...
- ... to provide a clear description of the purpose of the pull request.
- ... to include tests for any new or changed code.
- ... that all code is formatted as per the guidelines above.
Please be patient with pull request reviews, as our throughput is limited.