Skip to content

Latest commit

 

History

History
103 lines (66 loc) · 5.19 KB

CONTRIBUTING.ja.md

File metadata and controls

103 lines (66 loc) · 5.19 KB

CONTRIBUTING.ja.md

(The English version of this document: CONTRIBUTING.md)

Development process and conventions

Execution

開発時は Stack を使ってください。 Stack は Ubuntu なら $ sudo apt install haskell-stack でインストールできます。

ソースコードに変更を加えたものを実行するには、以下のコマンドを実行してください。

  • $ stack run convert XXX.py とすると src/ 以下をビルドしたものを使って実行される
  • $ stack run -- convert --target core XXX.py は C++ でなく core 言語として出力する
  • $ stack run -- convert --target rpython XXX.py は C++ でなく制限された Python 言語として出力する
  • $ stack run execute XXX.py < YYY.in は core 言語の構文木を直接実行する
  • $ stack run execute --target rpython XXX.py < YYY.in は制限された Python の構文木を直接実行する
  • $ python3 XXX.py < YYY.in' あるいは $ python3 -c 'import XXX; print(XXX.main(1, 2, [3, 4, 5]))' のようにすると通常の Python として実行できる
  • $ stack run convert --source core --target core XXX.jikka は core 言語の式を最適化して出力する
  • $ stack run convert --source core XXX.jikka は core 言語の式を C++ に変換する

Tests

テストには以下のコマンドを実行してください。 HspecDoctest が有効になっています。 また examples/ ディレクトリの中身が検査されます。

$ stack test
$ python3 scripts/integration_tests.py

テストのための GitHub Actions は .github/workflows/test.yml で定義されています。

Integration Tests

$ python3 scripts/integration_tests.py を実行すると examples/ ディレクトリの中身を用いてテストが実行されます。 examples/XXX.py という Python ファイルごとに、examples/data/XXX.YYY.in examples/data/XXX.YYY.out のようなファイル名のテストケースを探しまた examples/data/XXX.ZZZ.generator.py examples/data/XXX.solver.py などからテストケースを生成して、これを Python / 制限された Python / core / C++ として実行してそれぞれすべてが正しく動作することを検証します。

$ python3 scripts/integration_tests.py -k XXX とすると XXX をファイル名に含むテストだけを実行することができます。

テストケースが多くて困ることはあまりありません。 Jikka を用いて実際のコンテストの問題が解けたとき (あるいは解けそうなとき) は、ぜひそれをテストケースとして追加するプルリクエストを送ってください。

Formatting

すべてのフォーマットをまとめて検査してくれるスクリプトが scripte/pre-commit にあります。 $ ln -s $(pwd)/scripts/pre-commit .git/hooks/pre-commit を実行して pre-commit hook に設定しておくとよいでしょう。

Haskell

OrmoluHLint が有効になっています。 フォーマットの検査には以下のコマンドを実行してください。

$ stack exec ormolu -- --mode=check $(find src app test -name \*.hs)
$ stack exec hlint -- src app test

フォーマットを可能な範囲で自動で修正するには以下のコマンドを実行してください。

$ stack exec ormolu -- --mode=inplace $(find src app test -name \*.hs)

フォーマットのための GitHub Actions は .github/workflows/format.yml で定義されています。

C++

clang-format が有効になっています。

Python

yapfisort が有効になっています。 これらは $ pip3 install -r scripts/requirements.txt とすればインストールできます。

Markdown

Prettier が有効になっています。 これは Yarn を使って $ yarn install とすればインストールできます。

YAML

Prettier が有効になっています。 これは Yarn を使って $ yarn install とすればインストールできます。

Documents

実装内部のドキュメントには Haddock が使われています。 ローカルでドキュメントを生成するには以下のコマンドを実行してください。

$ stack haddock

Commit messages

Conventional Commits を使ってください。

Versioning

Haskell Package Versioning Policy に準拠しています。