Conversation
Republish the documentation. v0.38.0 released successfully, but its documentation was never published: `PublishToGitHubPages` was skipped on both `main` and the `v0.38.0` tag, because `CompletePipeline.yml` up to Actions v7.14.1 evaluated that job's condition with an implicit `success()` over the whole dependency closure, and the `AppTesting` jobs skipped by `apptest: false` propagated into it. Fixed in pyTooling/Actions v7.15.0, which `r7` now carries. This release exists to run the pipeline again with that fix in place; the package code is unchanged. Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| Documentation | 4 minor |
| ErrorProne | 2 critical |
🟢 Metrics 0 complexity · 0 duplication
Metric Results Complexity 0 Duplication 0
🟢 Coverage 100.00% diff coverage · +0.00% coverage variation
Metric Results Coverage variation ✅ +0.00% coverage variation Diff coverage ✅ 100.00% diff coverage Coverage variation details
Coverable lines Covered lines Coverage Common ancestor commit (91aea3e) 5219 4641 88.93% Head commit (98ac5cd) 5219 (+0) 4641 (+0) 88.93% (+0.00%) Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:
<coverage of head commit> - <coverage of common ancestor commit>Diff coverage details
Coverable lines Covered lines Diff coverage Pull request (#168) 4 4 100.00% Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:
<covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #168 +/- ##
=======================================
Coverage 87.14% 87.14%
=======================================
Files 24 24
Lines 5219 5219
Branches 446 446
=======================================
Hits 4548 4548
Misses 578 578
Partials 93 93
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. |
Incorporates Dependabot's #169 (pyTooling `~= 8.18` -> `~= 8.19`) and #170 (sphinx-reports `~= 0.11.1` -> `~= 0.11.2`), and brings `doc/Dependency.rst` in line with the requirement files - Dependabot does not touch the documentation tables, so they had drifted: * The pyTooling minimum is stated in three tables (package, documentation, packaging); all three now read 8.19. * `sphinx_design`, `sphinx-copybutton` and `sphinx_reports` are listed in `doc/requirements.txt`, but were missing from the documentation table. * `sphinx_fontawesome` was still listed, including its GPL 2.0 marker, although it is no longer a documentation requirement. `docutils_stubs` remains unlisted, matching pyTooling's own dependency table. Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
VHDL's `range_constraint` rule is `**range** range`, so a subtype indication is either a bare type mark - modelled as `SimpleSubtypeSymbol` - or a type mark followed by the `range` keyword *and* a range. A form like `integer range` doesn't exist, which leaves `ConstrainedScalarSubtypeSymbol` without a state where its constraint is absent. The `constraint` parameter therefore loses its `None` default and is typed `Range` instead of `Nullable[Range]`, in `ScalarConstraint` as well as in `ConstrainedScalarSubtypeSymbol`. The `Constraint` property is non-optional accordingly. A range constraint written as a range attribute (`natural range vector'range`) is a range too: `RangeFromName` referring to a `RangeAttributeSymbol`. It is now shown as a second example on the class and covered by a testcase, because that form was the reason the parameter was optional. Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Co-authored-by: Patrick Lehmann <Paebbels@gmail.com>
A minor release, not a patch: #172 makes the range constraint of `ConstrainedScalarSubtypeSymbol` mandatory, which is a breaking API change. `run.ps1` was still on 0.38.0 - it was missed in the v0.38.1 bump. Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Changes
pyToolingis required as~= 8.19.sphinx-reportsis required as~= 0.11.2.Bug Fixes
pyVHDLModel.Symbol:ConstrainedScalarSubtypeSymbol.__init__requires itsconstraintparameter.Now
Constraintis typedRangeinstead ofNullable[Range]Documentation
The v0.38.0 documentation was never published. The release itself completed — tag, release page and PyPI upload
all succeeded — but
PublishToGitHubPageswas skipped onmainand on thev0.38.0tag, sohttps://vhdl.github.io/pyVHDLModel/ still serves v0.37.0.
The defect was in
pyTooling/Actions, not here: up to v7.14.1,CompletePipeline.ymlguarded that job withConstrainedScalarSubtypeSymbolgained a second example, the range-attribute formsubtype index is natural range vector'range;, showing that it is aRangeFromNamereferring to aRangeAttributeSymbol.doc/Dependency.rstwas brought in line with the requirement files.Unit Tests
Pipeline.ymlsetsrun-name, so a pipeline dispatched onto a tag byTagReleaseCommitis titled with the tag instead of with the workflow name.test_ScalarConstraint_WithRangeAttribute, covers the range-attribute constraint(
natural range vector'range) as aRangeFromNameover aRangeAttributeSymbol.test_ScalarConstraint_RangeIsMandatoryandtest_ConstrainedScalarSubtypeSymbol_withoutConstraintnow assert thatomitting the constraint raises a
TypeError; both previously asserted thatConstraintisNone.Related Issues and Pull-Requests
pyGHDL.dom needs a companion change.
GetScalarConstrainedSubtypeFromNodeinpyGHDL/dom/_Translate.pypassesNonewhen GHDL reports the range constraint as anAttribute_Name, andConstrainedScalarSubtypeSymbol.__init__inpyGHDL/dom/Symbol.pystill declaresrng: Range = None. Neither raises, so this is not a crash — the field simplyholds
Noneagainst its declared type, andnatural range vector'rangereaches the model without its range.