beacon-biosignals / TransformSpecifications.jl

Structured processing elements with I/O specifications
MIT License
0 stars 0 forks source link

Export `input_assembler`, add introduction to docs, refactor abstract interface docs #11

Closed ericphanson closed 1 year ago

ericphanson commented 1 year ago

Some explanations for choices made in this PR:

input_assembler

Why export input_assembler if it is temporary?

  1. We already use it in the documentation examples, and in my opinion that makes it part of the public API, since if we change it in a breaking way, then the documented examples break, and that seems like a breaking change.
  2. The way the docs are currently setup, only exported functions show up, so currently it dosen't show up
    • That's why I want to do this in this PR, since I refer to it in my introduction
  3. You really need it to use the DAG functionality (big part of the package!)

So IMO we should just accept it is part of the public API and do a breaking change to change if when/if we want to do that.

Abstract interface docs

Regarding the refactoring of the abstract interface docs, here I've dropped @autodocs in favor of choosing the order and putting section headings in-between different parts of the docs. This doesn't run the risk of missing things, because we have strict=true set, so if we add new documented & exported functions to that page, Documenter will error at build time. I tested this with a new exported/documented function abc added to abstract.jl:

┌ Error: 1 docstring not included in the manual:
│ 
│     TransformSpecifications.abc :: Tuple{}
│ 
│ These are docstrings in the checked modules (configured with the modules keyword)
│ that are not included in @docs or @autodocs blocks.
└ @ Documenter.DocChecks ~/.julia/packages/Documenter/bYYzK/src/Utilities/Utilities.jl:32

BTW in general I feel like autodocs is awesome for getting docs off the ground quickly, but this sort of more manual ordering/subcategorizing with additional written text ends up making for nicer docs in the end, once there is some time to actually work on them. I was thinking of doing this treatment for all of them but decided I felt done working on docs for now 😄.

Introduction

Why write an opinioned introduction specifying a workflow, in contrast to the more hands-off approach used elsewhere in the docs? I felt like this would help my team and others dive in quickly, to try to answer "but how do I actually do it" more directly, without necessarily needing the implementer to fully appreciate the abstract interface / design philosophy / etc before getting started.