Skip to content

Validate code blocks in doc comments #224

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 49 commits into from
Apr 15, 2025
Merged

Validate code blocks in doc comments #224

merged 49 commits into from
Apr 15, 2025

Conversation

rvanasa
Copy link
Collaborator

@rvanasa rvanasa commented Mar 10, 2025

Progress:

  • Set up new docs validation CI workflow
  • Parse code blocks
  • Resolve include= references
  • Calculate line numbers for code blocks
  • Set up PocketIC runner
  • Wrap with persistent actor { ... } when not otherwise specified (we can be more strict about this in the future)
  • Convert // => ... comments into assertions
  • Check for unexpected usage of assertion comments
  • Handle various corner cases with assertion comments (e.g. let bindings)
  • Update all doc comments to comply with validation: AI docs base branch #237

Resolves #223.

Copy link

github-actions bot commented Mar 10, 2025

No description provided.

Copy link

Benchmark Results

bench/FromIters.bench.mo $({\color{gray}0\%})$

Benchmarking the fromIter functions

Columns describe the number of elements in the input iter.

Instructions: ${\color{gray}0\%}$
Heap: ${\color{gray}0\%}$
Stable Memory: ${\color{gray}0\%}$
Garbage Collection: ${\color{gray}0\%}$

Instructions

100 10_000 100_000
Array.fromIter 53_373 $({\color{gray}0\%})$ 5_152_334 $({\color{gray}0\%})$ 51_503_949 $({\color{gray}0\%})$
List.fromIter 35_436 $({\color{gray}0\%})$ 3_421_823 $({\color{gray}0\%})$ 34_204_824 $({\color{gray}0\%})$
List.fromIter . Iter.reverse 56_149 $({\color{gray}0\%})$ 5_392_962 $({\color{gray}0\%})$ 53_907_349 $({\color{gray}0\%})$

Heap

100 10_000 100_000
Array.fromIter 272 B $({\color{gray}0\%})$ 272 B $({\color{gray}0\%})$ 272 B $({\color{gray}0\%})$
List.fromIter 272 B $({\color{gray}0\%})$ 272 B $({\color{gray}0\%})$ 272 B $({\color{gray}0\%})$
List.fromIter . Iter.reverse 272 B $({\color{gray}0\%})$ 272 B $({\color{gray}0\%})$ 272 B $({\color{gray}0\%})$

Garbage Collection

100 10_000 100_000
Array.fromIter 2.76 KiB $({\color{gray}0\%})$ 234.79 KiB $({\color{gray}0\%})$ 2.29 MiB $({\color{gray}0\%})$
List.fromIter 3.51 KiB $({\color{gray}0\%})$ 312.88 KiB $({\color{gray}0\%})$ 3.05 MiB $({\color{gray}0\%})$
List.fromIter . Iter.reverse 5.11 KiB $({\color{gray}0\%})$ 469.17 KiB $({\color{gray}0\%})$ 4.58 MiB $({\color{gray}0\%})$
bench/PureListStackSafety.bench.mo $({\color{gray}0\%})$

List Stack safety

Check stack-safety of the following pure/List-related functions.

Instructions: ${\color{gray}0\%}$
Heap: ${\color{gray}0\%}$
Stable Memory: ${\color{gray}0\%}$
Garbage Collection: ${\color{gray}0\%}$

Instructions

pure/List.split 27_403_700 $({\color{gray}0\%})$
pure/List.all 9_301_156 $({\color{gray}0\%})$
pure/List.any 9_401_585 $({\color{gray}0\%})$
pure/List.map 26_005_117 $({\color{gray}0\%})$
pure/List.filter 24_305_592 $({\color{gray}0\%})$
pure/List.filterMap 30_606_216 $({\color{gray}0\%})$
pure/List.partition 24_706_539 $({\color{gray}0\%})$
pure/List.join 38_606_854 $({\color{gray}0\%})$
pure/List.flatten 29_607_262 $({\color{gray}0\%})$
pure/List.take 27_407_282 $({\color{gray}0\%})$
pure/List.drop 11_004_661 $({\color{gray}0\%})$
pure/List.foldRight 21_806_962 $({\color{gray}0\%})$
pure/List.merge 36_411_001 $({\color{gray}0\%})$
pure/List.chunks 61_513_741 $({\color{gray}0\%})$
pure/Queue 161_571_999 $({\color{gray}0\%})$

Heap

pure/List.split 272 B $({\color{gray}0\%})$
pure/List.all 272 B $({\color{gray}0\%})$
pure/List.any 272 B $({\color{gray}0\%})$
pure/List.map 272 B $({\color{gray}0\%})$
pure/List.filter 272 B $({\color{gray}0\%})$
pure/List.filterMap 272 B $({\color{gray}0\%})$
pure/List.partition 272 B $({\color{gray}0\%})$
pure/List.join 272 B $({\color{gray}0\%})$
pure/List.flatten 272 B $({\color{gray}0\%})$
pure/List.take 272 B $({\color{gray}0\%})$
pure/List.drop 272 B $({\color{gray}0\%})$
pure/List.foldRight 272 B $({\color{gray}0\%})$
pure/List.merge 272 B $({\color{gray}0\%})$
pure/List.chunks 272 B $({\color{gray}0\%})$
pure/Queue 272 B $({\color{gray}0\%})$

Garbage Collection

pure/List.split 3.05 MiB $({\color{gray}0\%})$
pure/List.all 328 B $({\color{gray}0\%})$
pure/List.any 328 B $({\color{gray}0\%})$
pure/List.map 3.05 MiB $({\color{gray}0\%})$
pure/List.filter 3.05 MiB $({\color{gray}0\%})$
pure/List.filterMap 3.05 MiB $({\color{gray}0\%})$
pure/List.partition 3.05 MiB $({\color{gray}0\%})$
pure/List.join 3.05 MiB $({\color{gray}0\%})$
pure/List.flatten 3.05 MiB $({\color{gray}0\%})$
pure/List.take 3.05 MiB $({\color{gray}0\%})$
pure/List.drop 328 B $({\color{gray}0\%})$
pure/List.foldRight 1.53 MiB $({\color{gray}0\%})$
pure/List.merge 4.58 MiB $({\color{gray}0\%})$
pure/List.chunks 7.63 MiB $({\color{gray}0\%})$
pure/Queue 18.31 MiB $({\color{gray}0\%})$

Note: Renamed benchmarks cannot be compared. Refer to the current baseline for manual comparison.

rvanasa and others added 2 commits April 15, 2025 13:47
* Only validate docs for changed Motoko files

* Fix changed files logic in CI

* Simplify

* Try using 'ref' instead of 'sha'

* Try 'origin/ref'

* Try '--fetch-depth 0'

* Remove changelog validation for branches merging into 'ai-docs'

* Run 'main' canister method if found in doc example

* Support 'no-validate' tag (separate from 'no-repl')

* `Blob` docs (#236)

* Update Blob docs

* Fix 'toVarArray()' example

* Update src/Blob.mo

* `Text` docs (#246)

* `Tuples` docs (#248)

* `Result` docs (#244)

* Update internal/PRNG docs (#249)

* `pure/Queue` docs (#254)

* `pure/Set` docs (#255)

* Update pure/Set docs

* some fixes

* all examples passing

* simplifications (wip)

* more simplifications

* add leading example

---------

Co-authored-by: Claudio Russo <claudio@dfinity.org>

* Update assertions in `pure/Set` doc comments (#273)

* Update assertions in pure/Set

* Fix

* Add more transient keywords

* `Iter` docs (#242)

* Update Iter docs

* Fix inconsistencies

* Fix example

* Remove unrelatd changes

* `Runtime` docs (#245)

* Update Runtime docs

* Use 'no-validate' tags

* Format

* Add code style and documentation guidelines (#274)

* Add code / documentation style guidelines

* Fix CI

* `pure/List` docs (#250)

* Update assertions

* Wrap examples in persistent actor

* Refactor to use let bindings

* Manual fixes

* fix examples

* missing toText doc

* remove redundant type annotations

---------

Co-authored-by: Kamil Listopad <listopadkamil@gmail.com>

* `Queue` docs (#257)

* Update Queue docs

* beter names in example

* unnecessary import

---------

Co-authored-by: Kamil Listopad <listopadkamil@gmail.com>

* `Set` docs (#258)

* Update Set docs

* AI docs pass

* Format

* Add transient keywords

* fix broken examples

* fix doc bug in pure/Set.mo

* fix doc bug in pure/Set.mo

* simplify pure/Set.mo doc

* simplifications

* more pure/Set.mo doc fixes (use assertions not => comments)

* simplification up to min

* done

* remove tmp comment

* simplify

* Fix pure/Set imports in Set examples

---------

Co-authored-by: Claudio Russo <claudio@dfinity.org>

* `pure/Map` docs (#253)

* Update pure/Map docs

* first draft

* rewrite delete example

* tweaks

---------

Co-authored-by: Claudio Russo <claudio@dfinity.org>

* `Map` docs (#256)

* Manual fixes for starting point

* Update src/Map.mo

* Update Map.mo

* Update Map.mo

* improve from/toPure set example

* remove transient from pure/Map.mo

* fix pure/Map.mo examples

* wip

* first draft

* pure -> impure

---------

Co-authored-by: Claudio Russo <claudio@dfinity.org>
Co-authored-by: Gabor Greif <gabor@dfinity.org>

* `Char` docs (#289)

* Char docs

* Update Char.mo

* format

---------

Co-authored-by: Gabor Greif <gabor@dfinity.org>

* `Timer` docs (#247)

* Update Timer docs

* Manually fix example

---------

Co-authored-by: Gabor Greif <gabor@dfinity.org>

* Update API lockfile

* Remove extraneous '// =>' in 'Blob.empty()' code example

* chore: tweak `Char` (#290)

* `Error` docs (#240)

* Update Error docs

* Format

* Fix order of arguments

* `Cycles` docs (#239)

* Update Cycles docs

* try bumping `moc`

---------

Co-authored-by: Gabor Greif <gabor@dfinity.org>

* `Principal` docs (#243)

* Update Principal docs

* Fix example

* Make this validate for now...

* `Stack` docs (#238)

* Update Stack docs

* Fix assertions

* improvements

* missing commit: simpler example

---------

Co-authored-by: Kamil Listopad <listopadkamil@gmail.com>
Co-authored-by: Kamil Listopad <kamil.listopad@dfinity.org>

* Update instructions for setting up local dev environment (#281)

* Update readme

* Add Mops toolchain setup command

* `Array` docs (#287)

* Array docs

* Fix example

* Improve docs

* Fix example

* Apply suggestions from code review

Co-authored-by: Claudio Russo <claudio@dfinity.org>

---------

Co-authored-by: Claudio Russo <claudio@dfinity.org>

* Only run changelog validation when merging into main branch

* `Float` docs (#241)

* Update Float docs

* Skip examples with different behavior in interpreter

* Update src/Float.mo

---------

Co-authored-by: Gabor Greif <gabor@dfinity.org>

* `Region` docs (#293)

* Region docs

* Manual fixes

* Rename actor methods

---------

Co-authored-by: Claudio Russo <claudio@dfinity.org>
Co-authored-by: Kamil Listopad <listopadkamil@gmail.com>
Co-authored-by: Gabor Greif <gabor@dfinity.org>
Co-authored-by: Kamil Listopad <kamil.listopad@dfinity.org>
@rvanasa rvanasa marked this pull request as ready for review April 15, 2025 19:53
@rvanasa rvanasa requested a review from a team as a code owner April 15, 2025 19:53
@rvanasa rvanasa enabled auto-merge (squash) April 15, 2025 19:53
@rvanasa rvanasa merged commit da66a31 into main Apr 15, 2025
16 of 17 checks passed
@rvanasa rvanasa deleted the validate-docs branch April 15, 2025 20:10
@rvanasa rvanasa mentioned this pull request Apr 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implementation: validate code blocks in doc comments
2 participants