Documenter & semantic versioning

Documenter, like any good Julia packagesemantic versioning (SemVer) に従います。そのため、パッケージが現在 v1.x のライフサイクルにあるため、Documenter の変更は、文書化された動作に依存するパッケージの既存の使用を壊すべきではありません。[1]

しかし、Documenterは比較的複雑であり、破壊的変更が何を構成するのかが時々不明確です。たとえば、HTMLテーマのCSSクラスを変更することは許可されていますか?ユーザーが@raw htmlブロック内のCSSクラスに依存していた場合はどうなりますか?彼らのHTMLが正しくレンダリングされなくなった場合、それは破壊的変更ですか?LaTeXコンパイラを完全に変更することは破壊的変更ですか?それが、pdflatexでのみ機能する機能を使用している数式ブロックのためにどこかでPDFビルドを壊す場合はどうなりますか?

このページは、Documenter SemVerの保証が何であるかおよび何でないかを明確にすることを目的としており、ユーザーへの情報提供と開発者へのガイダンスを兼ねています。

This page is not complete!

現在内部APIまたは文書化されていない動作に依存する必要がある場合は、それを文書化するために問題を開くか、プルリクエストを作成してください!その動作がすでにde facto SemVer保証であるか、簡単に整理されて公開APIにすることができる可能性が高いです。目標は、時間をかけて追加のSemVer保証を追加し、文書化することです。

Documenter's API guarantees

以下のAPIおよび動作は変更されないことが保証されています:

  • Julia API(公開されたDocumenter関数とその文書化された引数)に関する標準的な約束。要するに、Documenter APIの公開され、文書化された部分のみを使用するmake.jlは常に動作し続けるべきです(つまり、ビルドは完了するべきです)。公開APIにはすべてのエクスポートされた関数と型が含まれますが、それに限定されるわけではありません – マニュアルの「リファレンス」セクションで公開されたJulia APIのリストを参照してください。

  • すべての文書化された Documenter の動作。例えば、Documenter が determines remote repository links is documented する方法や、HTML ビルドによって生成されるファイルとその構造。文書化されていないエッジケースの動作は変わる可能性がありますが、文書化されている内容に従ってのみ変わります。

Experimental APIs

一部のAPIは明示的に実験的であるとマークされている場合があります。その場合、マイナーバージョン内でのみそれらに依存することができます。次のマイナーバージョンのリリースでは、実験的な機能やAPIが完全に変更されたり削除されたりする可能性があります。

実験的なAPI(Documenter拡張パッケージ内、またはドキュメントビルド環境内)に依存する場合は、特定の互換性のあるマイナーバージョンにDocumenterを固定する必要があります。 "tilde specifier" in the Project.toml file

What is not covered by SemVer

原則として、前のセクションでカバーされていないものは、定義上、公開APIの一部ではなく、現在の動作を維持することが保証されていません

ただし、いくつかのことを明示的に述べる価値があります。特に、現在APIの一部ではないが、将来的に(何らかの形で)追加されるべきものが含まれますが、公開APIとしてコミットする前に慎重な検討が必要です。

  • ドキュメンターの内部に何らかの形でフックする場合は常に注意が必要です。これには、追加のビルドステップやレンダラーを追加するなど、内部の明らかに拡張可能な部分にフックすることが含まれます。ここでの長期的な目標は、クリーンなプラグインAPIを作成することですが、現在の内部をそのまま維持することは難しいでしょう。

  • 生成されたドキュメントのHTML、TeX、またはファイル構造(明示的に文書化されていない限り)。これにはHTMLテーマのCSSが含まれ、そのためカスタムCSSのオーバーライドはいつでも機能しなくなる可能性があります。ただし、ここには時間とともに文書化されるべき多くの事実上の保証があります(例:カスタムテーマ用)。

  • HTML UIの外観や操作感、生成されたPDFは、マイナーバージョンごとに大きく変わる可能性があります。

  • 明示的に実験的とマークされたものは、安定性が保証されていません(上記の注意を参照してください)。

Patch versions are probably okay

もし非SemVerの動作、機能、または内部に依存している場合、パッチリリース内で物事が壊れないことを期待するのはおそらく問題ありません。この場合、Project.tomlファイルに[compat]エントリを追加し、特定のマイナーバージョンにDocumenter'sを固定するために、tilde specifierを使用する必要があります。例えば、

Documenter = "~1.X"

X は、あなたが開発しているマイナーバージョンです。

代わりに、これがパッケージのドキュメント用であり、あなたの docs/make.jl スクリプトが非SemVerの動作に依存している場合、Documenterのバージョンを完全に固定するために docs/Manifest.toml ファイルをチェックインすることもできます。ただし、メンテナンス担当者のためのドキュメントとして、docs/Project.toml ファイルにバージョンの制約を含めることは依然として良いアイデアかもしれません。

  • 1Eventually, of course, Documenter 2.0 may break everything. But we don't expect a breaking release in the very near future.