Skip to content

v0.39.0 - #168

Merged
Paebbels merged 8 commits into
mainfrom
dev
Aug 4, 2026
Merged

v0.39.0#168
Paebbels merged 8 commits into
mainfrom
dev

Conversation

@Paebbels

@Paebbels Paebbels commented Aug 3, 2026

Copy link
Copy Markdown
Member

Changes

  • Bumped dependencies:
    • pyTooling is required as ~= 8.19.
    • sphinx-reports is required as ~= 0.11.2.

Bug Fixes

  • pyVHDLModel.Symbol:
    • ConstrainedScalarSubtypeSymbol.__init__ requires its constraint parameter.
      Now Constraint is typed Range instead of Nullable[Range]

Documentation

  • The v0.38.0 documentation was never published. The release itself completed — tag, release page and PyPI upload
    all succeeded — but PublishToGitHubPages was skipped on main and on the v0.38.0 tag, so
    https://vhdl.github.io/pyVHDLModel/ still serves v0.37.0.

    The defect was in pyTooling/Actions, not here: up to v7.14.1, CompletePipeline.yml guarded that job with

    if: contains(inputs.documentation_steps, 'pages')
  • ConstrainedScalarSubtypeSymbol gained a second example, the range-attribute form
    subtype index is natural range vector'range;, showing that it is a RangeFromName referring to a RangeAttributeSymbol.

  • doc/Dependency.rst was brought in line with the requirement files.

Unit Tests

  • CI: Pipeline.yml sets run-name, so a pipeline dispatched onto a tag by TagReleaseCommit is titled with the tag instead of with the workflow name.
  • The new test, test_ScalarConstraint_WithRangeAttribute, covers the range-attribute constraint
    (natural range vector'range) as a RangeFromName over a RangeAttributeSymbol.
  • test_ScalarConstraint_RangeIsMandatory and test_ConstrainedScalarSubtypeSymbol_withoutConstraint now assert that
    omitting the constraint raises a TypeError; both previously asserted that Constraint is None.

Related Issues and Pull-Requests

pyGHDL.dom needs a companion change. GetScalarConstrainedSubtypeFromNode in pyGHDL/dom/_Translate.py passes
None when GHDL reports the range constraint as an Attribute_Name, and ConstrainedScalarSubtypeSymbol.__init__ in
pyGHDL/dom/Symbol.py still declares rng: Range = None. Neither raises, so this is not a crash — the field simply
holds None against its declared type, and natural range vector'range reaches the model without its range.

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>
@codacy-production

codacy-production Bot commented Aug 3, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 2 critical · 4 minor

Alerts:
⚠ 6 issues (≤ 0 issues of at least minor severity)

Results:
6 new issues

Category Results
Documentation 4 minor
ErrorProne 2 critical

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

🟢 Coverage 100.00% diff coverage · +0.00% coverage variation

Metric Results
Coverage variation +0.00% coverage variation
Diff coverage 100.00% diff coverage

View coverage diff in Codacy

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

codecov Bot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.14%. Comparing base (91aea3e) to head (98ac5cd).
✅ All tests successful. No failed tests found.

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           
Flag Coverage Δ
unittests 87.14% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

claude-code and others added 2 commits August 4, 2026 20:17
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>
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>
@Paebbels Paebbels changed the title v0.38.1 v0.39.0 Aug 4, 2026
@Paebbels Paebbels added Dependencies documentation Improvements or additions to documentation FE: pyGHDL.dom labels Aug 4, 2026
@Paebbels
Paebbels merged commit 29c31e8 into main Aug 4, 2026
68 of 69 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Dependencies documentation Improvements or additions to documentation FE: pyGHDL.dom

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants