pyVHDLModelTreesitter 0.7.1__tar.gz → 0.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/.gitignore +2 -1
  2. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/PKG-INFO +26 -21
  3. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/README.md +9 -4
  4. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/pyproject.toml +22 -23
  5. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/Expression.py +37 -0
  6. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Association.py +53 -0
  7. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Base.py +154 -0
  8. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Concurrent.py +239 -0
  9. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Design.py +24 -0
  10. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_DesignUnit.py +427 -0
  11. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Document.py +159 -0
  12. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Interface.py +138 -0
  13. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Name.py +20 -0
  14. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Object.py +90 -0
  15. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Sequential.py +172 -0
  16. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Type.py +134 -0
  17. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/__init__.py +14 -0
  18. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_parse.py +317 -141
  19. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_subtype_indication.py +169 -0
  20. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/_errors.py → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/error.py +37 -0
  21. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/format.py +399 -0
  22. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/__init__.py +9 -0
  23. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/_generated_queries.py +193 -0
  24. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/_protocol.py +65 -0
  25. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/_query.py +117 -0
  26. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries}/_utils.py +2 -19
  27. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/aggregate.scm +7 -0
  28. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/bit_string_literal.scm +5 -0
  29. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/component_declaration.scm +8 -0
  30. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/concurrent_conditional_signal_assignment.scm +6 -0
  31. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/constant_declaration.scm +13 -0
  32. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/constrained_scalar.scm +17 -0
  33. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/else_statement.scm +3 -0
  34. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/enumeration_type_definition.scm +5 -0
  35. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/if_elsif_statement.scm +18 -0
  36. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/if_statement_block.scm +3 -0
  37. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/physical_literal.scm +4 -0
  38. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/process_statement.scm +10 -0
  39. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/record_type_definition.scm +6 -0
  40. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/signal_declaration.scm +13 -0
  41. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/subtype_declaration.scm +4 -0
  42. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/type_declaration.scm +13 -0
  43. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries/signal_declaration.scm → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/variable_declaration.scm +2 -2
  44. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/wait_statement.scm +13 -0
  45. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Association.py +0 -104
  46. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Base.py +0 -205
  47. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Concurrent.py +0 -244
  48. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/DesignUnit.py +0 -497
  49. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Expression.py +0 -651
  50. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Interface.py +0 -213
  51. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Name.py +0 -117
  52. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Object.py +0 -146
  53. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/Symbol.py +0 -200
  54. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/_Design.py +0 -55
  55. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/_Document.py +0 -166
  56. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/_Library.py +0 -46
  57. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/__init__.py +0 -40
  58. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/cli/__init__.py +0 -1
  59. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/cli/_dump_treesitter_parse.py +0 -29
  60. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/format.py +0 -68
  61. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/__init__.py +0 -25
  62. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/_base_class.py +0 -30
  63. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries/constant_declaration.scm +0 -10
  64. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries/ignorable_parentheses.scm +0 -11
  65. pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/query.py +0 -236
  66. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/LICENSE +0 -0
  67. {pyvhdlmodeltreesitter-0.7.1 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/py.typed +0 -0
  68. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/adding_expression.scm +0 -0
  69. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/architecture_definition.scm +0 -0
  70. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/association_element.scm +0 -0
  71. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/association_elements.scm +0 -0
  72. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/association_list_simple_range.scm +0 -0
  73. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/component_instantiation_statement.scm +0 -0
  74. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/concurrent_simple_signal_assignment.scm +0 -0
  75. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/constrained_1d_array.scm +0 -0
  76. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/design_units.scm +0 -0
  77. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/entity_declaration.scm +0 -0
  78. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/function_call.scm +0 -0
  79. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/indexed_name.scm +0 -0
  80. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/interface_declaration.scm +0 -0
  81. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/interface_declarations.scm +0 -0
  82. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/library_clauses.scm +0 -0
  83. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/library_namespaces.scm +0 -0
  84. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/logical_expression.scm +0 -0
  85. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/multiplying_expression.scm +0 -0
  86. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/package_declaration.scm +0 -0
  87. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/package_definition.scm +0 -0
  88. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/relational_expression.scm +0 -0
  89. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/selected_names.scm +0 -0
  90. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/shift_expression.scm +0 -0
  91. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/simple_subtype.scm +0 -0
  92. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/type_conversion.scm +0 -0
  93. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/unary_expression.scm +0 -0
  94. {pyvhdlmodeltreesitter-0.7.1/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/use_clauses.scm +0 -0
@@ -7,7 +7,8 @@
7
7
  /.venv
8
8
  /dist/
9
9
 
10
- __pycache__/
10
+ .docker-login
11
11
  .mypy_cache/
12
12
  .pytest_cache/
13
13
  .ruff_cache/
14
+ __pycache__/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyVHDLModelTreesitter
3
- Version: 0.7.1
3
+ Version: 0.9.0
4
4
  Summary: An implementation of pyVHDLModel using treesitter
5
5
  Project-URL: Repository, https://gitlab.com/dawalters/pyVHDLModelTreesitter
6
6
  Author: Dominic Adam Walters
@@ -16,26 +16,26 @@ Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Programming Language :: Python :: 3.14
17
17
  Requires-Python: >=3.11
18
18
  Requires-Dist: pygments>=2.20.0
19
- Requires-Dist: pyvhdlmodel>=0.34.0
19
+ Requires-Dist: pyvhdlmodel>=0.38.0
20
20
  Requires-Dist: rich>=11.0.0
21
21
  Requires-Dist: tree-sitter-vhdl>=1.2.5
22
22
  Requires-Dist: tree-sitter>=0.23.0
23
23
  Provides-Extra: dev
24
- Requires-Dist: coverage==7.15.0; extra == 'dev'
25
- Requires-Dist: cryptography==49.0.0; extra == 'dev'
26
- Requires-Dist: hatch==1.17.0; extra == 'dev'
27
- Requires-Dist: idna==3.18; extra == 'dev'
28
- Requires-Dist: jaraco-context==6.1.2; extra == 'dev'
29
- Requires-Dist: mypy==2.1.0; extra == 'dev'
30
- Requires-Dist: pre-commit==4.6.0; extra == 'dev'
31
- Requires-Dist: pytest-cov==7.1.0; extra == 'dev'
32
- Requires-Dist: pytest-order==1.5.0; extra == 'dev'
33
- Requires-Dist: pytest-sugar==1.1.1; extra == 'dev'
34
- Requires-Dist: pytest-xdist==3.8.0; extra == 'dev'
35
- Requires-Dist: pytest==9.1.1; extra == 'dev'
36
- Requires-Dist: ruff==0.15.20; extra == 'dev'
37
- Requires-Dist: ty==0.0.56; extra == 'dev'
38
- Requires-Dist: uv==0.11.26; extra == 'dev'
24
+ Requires-Dist: coverage>=7.15.2; extra == 'dev'
25
+ Requires-Dist: cryptography>=49.0.0; extra == 'dev'
26
+ Requires-Dist: hatch>=1.17.1; extra == 'dev'
27
+ Requires-Dist: idna>=3.18; extra == 'dev'
28
+ Requires-Dist: jaraco-context>=6.1.2; extra == 'dev'
29
+ Requires-Dist: mypy>=2.3.0; extra == 'dev'
30
+ Requires-Dist: pre-commit>=4.6.1; extra == 'dev'
31
+ Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
32
+ Requires-Dist: pytest-order>=1.5.0; extra == 'dev'
33
+ Requires-Dist: pytest-sugar>=1.1.1; extra == 'dev'
34
+ Requires-Dist: pytest-xdist>=3.8.0; extra == 'dev'
35
+ Requires-Dist: pytest>=9.1.1; extra == 'dev'
36
+ Requires-Dist: ruff>=0.16.1; extra == 'dev'
37
+ Requires-Dist: ty>=0.0.65; extra == 'dev'
38
+ Requires-Dist: uv>=0.12.0; extra == 'dev'
39
39
  Description-Content-Type: text/markdown
40
40
 
41
41
  # pyVHDLModelTreesitter
@@ -47,7 +47,8 @@ Description-Content-Type: text/markdown
47
47
  [![Python Version][shield-python-version]][pyVHDLModelTreesitter-pypi]
48
48
 
49
49
  `pyVHDLModelTreesitter` is an implementation of the
50
- [`pyVHDLModel`][pyVHDLModel-github] API using `tree-sitter-vhdl`.
50
+ [`pyVHDLModel`][pyVHDLModel-github] API using
51
+ [`tree-sitter-vhdl`][tree-sitter-vhdl].
51
52
 
52
53
  > Disclaimer: This project is in early development and only implements a
53
54
  fraction of the features of [`pyVHDLModel`][pyVHDLModel-github].
@@ -69,9 +70,9 @@ You can download source releases from the
69
70
 
70
71
  ## Documentation
71
72
 
72
- In the simplest cases where you just want to parse a VHDL file:
73
+ To parse a VHDL file:
73
74
 
74
- ```python3
75
+ ```python
75
76
  import pyVHDLModelTreesitter
76
77
 
77
78
  document = pyVHDLModelTreesitter.Document.from_file("path/to/file.vhd")
@@ -80,7 +81,9 @@ document = pyVHDLModelTreesitter.Document.from_file("path/to/file.vhd")
80
81
  `pyVHDLModelTreesitter.Document` is a subclass of
81
82
  [`pyVHDLModel.Document`][pyVHDLModel-Document].
82
83
 
83
- Detailed documentation is currently unavailable.
84
+ Detailed documentation is available for [`pyVHDLModel`][pyVHDLModel-documentation].
85
+
86
+ A complete list of public API endpoints is in [DOCS.md](DOCS.md).
84
87
 
85
88
  ## Setup for Development
86
89
 
@@ -107,6 +110,7 @@ You can `make help` to see what actions are available.
107
110
 
108
111
  [precommit-github]: https://github.com/pre-commit/pre-commit
109
112
  [pyVHDLModel-Document]: https://vhdl.github.io/pyVHDLModel/pyVHDLModel/pyVHDLModel.html#pyVHDLModel.Document
113
+ [pyVHDLModel-documentation]: https://vhdl.github.io/pyVHDLModel
110
114
  [pyVHDLModel-github]: https://github.com/VHDL/pyVHDLModel
111
115
  [pyVHDLModelTreesitter-codecov]: https://codecov.io/gitlab/dawalters/pyVHDLModelTreesitter
112
116
  [pyVHDLModelTreesitter-pipeline]: https://gitlab.com/dawalters/pyVHDLModelTreesitter/-/pipelines?page=1&scope=all&ref=develop
@@ -118,3 +122,4 @@ You can `make help` to see what actions are available.
118
122
  [shield-python-version]: https://img.shields.io/pypi/pyversions/pyVHDLModelTreesitter
119
123
  [shield-releases]: https://gitlab.com/dawalters/pyVHDLModelTreesitter/-/badges/release.svg
120
124
  [shield-version]: https://img.shields.io/pypi/v/pyVHDLModelTreesitter
125
+ [tree-sitter-vhdl]: https://github.com/jpt13653903/tree-sitter-vhdl
@@ -7,7 +7,8 @@
7
7
  [![Python Version][shield-python-version]][pyVHDLModelTreesitter-pypi]
8
8
 
9
9
  `pyVHDLModelTreesitter` is an implementation of the
10
- [`pyVHDLModel`][pyVHDLModel-github] API using `tree-sitter-vhdl`.
10
+ [`pyVHDLModel`][pyVHDLModel-github] API using
11
+ [`tree-sitter-vhdl`][tree-sitter-vhdl].
11
12
 
12
13
  > Disclaimer: This project is in early development and only implements a
13
14
  fraction of the features of [`pyVHDLModel`][pyVHDLModel-github].
@@ -29,9 +30,9 @@ You can download source releases from the
29
30
 
30
31
  ## Documentation
31
32
 
32
- In the simplest cases where you just want to parse a VHDL file:
33
+ To parse a VHDL file:
33
34
 
34
- ```python3
35
+ ```python
35
36
  import pyVHDLModelTreesitter
36
37
 
37
38
  document = pyVHDLModelTreesitter.Document.from_file("path/to/file.vhd")
@@ -40,7 +41,9 @@ document = pyVHDLModelTreesitter.Document.from_file("path/to/file.vhd")
40
41
  `pyVHDLModelTreesitter.Document` is a subclass of
41
42
  [`pyVHDLModel.Document`][pyVHDLModel-Document].
42
43
 
43
- Detailed documentation is currently unavailable.
44
+ Detailed documentation is available for [`pyVHDLModel`][pyVHDLModel-documentation].
45
+
46
+ A complete list of public API endpoints is in [DOCS.md](DOCS.md).
44
47
 
45
48
  ## Setup for Development
46
49
 
@@ -67,6 +70,7 @@ You can `make help` to see what actions are available.
67
70
 
68
71
  [precommit-github]: https://github.com/pre-commit/pre-commit
69
72
  [pyVHDLModel-Document]: https://vhdl.github.io/pyVHDLModel/pyVHDLModel/pyVHDLModel.html#pyVHDLModel.Document
73
+ [pyVHDLModel-documentation]: https://vhdl.github.io/pyVHDLModel
70
74
  [pyVHDLModel-github]: https://github.com/VHDL/pyVHDLModel
71
75
  [pyVHDLModelTreesitter-codecov]: https://codecov.io/gitlab/dawalters/pyVHDLModelTreesitter
72
76
  [pyVHDLModelTreesitter-pipeline]: https://gitlab.com/dawalters/pyVHDLModelTreesitter/-/pipelines?page=1&scope=all&ref=develop
@@ -78,3 +82,4 @@ You can `make help` to see what actions are available.
78
82
  [shield-python-version]: https://img.shields.io/pypi/pyversions/pyVHDLModelTreesitter
79
83
  [shield-releases]: https://gitlab.com/dawalters/pyVHDLModelTreesitter/-/badges/release.svg
80
84
  [shield-version]: https://img.shields.io/pypi/v/pyVHDLModelTreesitter
85
+ [tree-sitter-vhdl]: https://github.com/jpt13653903/tree-sitter-vhdl
@@ -4,16 +4,16 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pyVHDLModelTreesitter"
7
- version = "0.7.1"
7
+ version = "0.9.0"
8
8
  description = "An implementation of pyVHDLModel using treesitter"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  dependencies = [
12
- "pyVHDLModel >= 0.34.0",
12
+ "pyVHDLModel >= 0.38.0",
13
13
  "rich >= 11.0.0",
14
14
  "pygments >= 2.20.0", # forced to avoid CVE
15
15
  "tree-sitter >= 0.23.0",
16
- "tree-sitter-vhdl >= 1.2.5",
16
+ "tree-sitter-vhdl >= 1.2.5", # TODO: move to 1.6.0 once released
17
17
  ]
18
18
  authors = [
19
19
  { name = "Dominic Adam Walters" },
@@ -32,26 +32,23 @@ classifiers = [
32
32
 
33
33
  [project.optional-dependencies]
34
34
  dev = [
35
- "coverage == 7.15.0",
36
- "hatch == 1.17.0",
37
- "cryptography == 49.0.0", # forced to avoid CVE
38
- "idna == 3.18", # forced to avoid CVE
39
- "jaraco-context == 6.1.2", # forced to avoid CVE
40
- "mypy == 2.1.0",
41
- "pre-commit == 4.6.0",
42
- "pytest == 9.1.1",
43
- "pytest-cov == 7.1.0",
44
- "pytest-order == 1.5.0",
45
- "pytest-sugar == 1.1.1",
46
- "pytest-xdist == 3.8.0",
47
- "ruff == 0.15.20",
48
- "ty == 0.0.56",
49
- "uv == 0.11.26",
35
+ "coverage >= 7.15.2",
36
+ "hatch >= 1.17.1",
37
+ "cryptography >= 49.0.0", # forced to avoid CVE
38
+ "idna >= 3.18", # forced to avoid CVE
39
+ "jaraco-context >= 6.1.2", # forced to avoid CVE
40
+ "mypy >= 2.3.0",
41
+ "pre-commit >= 4.6.1",
42
+ "pytest >= 9.1.1",
43
+ "pytest-cov >= 7.1.0",
44
+ "pytest-order >= 1.5.0",
45
+ "pytest-sugar >= 1.1.1",
46
+ "pytest-xdist >= 3.8.0",
47
+ "ruff >= 0.16.1",
48
+ "ty >= 0.0.65",
49
+ "uv >= 0.12.0",
50
50
  ]
51
51
 
52
- [project.scripts]
53
- dump-treesitter-parse = "pyVHDLModelTreesitter.cli._dump_treesitter_parse:main"
54
-
55
52
  [project.urls]
56
53
  Repository = "https://gitlab.com/dawalters/pyVHDLModelTreesitter"
57
54
 
@@ -92,12 +89,14 @@ dependencies = [
92
89
  python = ["3.11", "3.12", "3.13", "3.14"]
93
90
 
94
91
  [tool.mypy]
92
+ allow_redefinition = true
93
+ implicit_reexport = true
94
+ scripts_are_modules = true
95
95
  strict = true
96
96
  warn_unreachable = true
97
- implicit_reexport = true
98
97
 
99
98
  [tool.pytest.ini_options]
100
- addopts = "--capture=fd -n 0 --cov=pyVHDLModelTreesitter --cov-report html --cov-report xml --verbose --junitxml=.junit.xml -o junit_family=legacy"
99
+ addopts = "--capture=fd -n auto --dist loadgroup --cov=pyVHDLModelTreesitter --cov-report html --cov-report xml --verbose --junitxml=.junit.xml -o junit_family=legacy"
101
100
  norecursedirs = "oss/*"
102
101
  testpaths = [
103
102
  "tests",
@@ -0,0 +1,37 @@
1
+ """Submodule mirroring modified aspects of pyVHDLModel.Expression."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "FunctionCall",
7
+ ]
8
+
9
+ from typing import TYPE_CHECKING
10
+
11
+ import pyVHDLModel
12
+
13
+ if TYPE_CHECKING:
14
+ from pyVHDLModel.Association import ParameterAssociationItem
15
+ from pyVHDLModel.Name import Name
16
+
17
+
18
+ #####################################
19
+ # Modified first order base classes #
20
+ #####################################
21
+ class FunctionCall(pyVHDLModel.Expression.FunctionCall): # ruff: ignore[undocumented-public-class]
22
+ # TODO: Report on pyVHDLModel that function calls are currently undefined
23
+ _name: Name
24
+ _arguments: list[ParameterAssociationItem]
25
+
26
+ def __init__( # ruff: ignore[undocumented-public-init]
27
+ self,
28
+ name: Name,
29
+ arguments: list[ParameterAssociationItem],
30
+ parent: pyVHDLModel.Base.ModelEntity | None = None,
31
+ ) -> None:
32
+ super().__init__(parent)
33
+ self._name = name
34
+ self._arguments = arguments
35
+
36
+ def __str__(self) -> str: # ruff: ignore[undocumented-magic-method]
37
+ return f"{self._name}({', '.join(str(a) for a in self._arguments)})"
@@ -0,0 +1,53 @@
1
+ """Submodule defining parsers for classes from pyVHDLModel.Association."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "parse_association_item",
7
+ ]
8
+
9
+ from typing import TYPE_CHECKING, TypeVar
10
+
11
+ from pyVHDLModel.Association import AssociationItem
12
+ from pyVHDLModel.Name import OpenName
13
+ from pyVHDLModel.Symbol import SignalSymbol
14
+
15
+ from pyVHDLModelTreesitter._Name import parse_name
16
+ from pyVHDLModelTreesitter.queries import AssociationElement
17
+ from pyVHDLModelTreesitter.queries._protocol import inject_node
18
+ from pyVHDLModelTreesitter.queries._utils import (
19
+ get_node,
20
+ get_node_text,
21
+ )
22
+
23
+ if TYPE_CHECKING:
24
+ import pyVHDLModel
25
+ import tree_sitter
26
+
27
+
28
+ T = TypeVar("T", bound=AssociationItem)
29
+
30
+
31
+ def parse_association_item(cls: type[T], node: tree_sitter.Node) -> T | None:
32
+ """Create an AssociationItem from a tree-sitter node."""
33
+ captures = AssociationElement.capture_first_root(node)
34
+ formal_node = get_node(node, captures, "formal", optional=True)
35
+ formal = None
36
+ if formal_node is not None:
37
+ formal = SignalSymbol(parse_name(get_node_text(formal_node)))
38
+ actual_node = get_node(node, captures, "actual")
39
+ actual: pyVHDLModel.Base.ExpressionUnion
40
+ if actual_node.type == "OPEN":
41
+ actual = OpenName()
42
+ else:
43
+ # ruff: ignore[import-outside-top-level]
44
+ from pyVHDLModelTreesitter._parse import parse_conditional_expression
45
+
46
+ actual = parse_conditional_expression(actual_node)
47
+ if actual is None:
48
+ return None
49
+ # TODO: `formal` is a `SignalSymbol`, is this correct?
50
+ # TODO: `OpenName` might need wrapping in a `Symbol`
51
+ # ty: ignore[invalid-argument-type]
52
+ ret = cls(formal, actual) # type: ignore[arg-type]
53
+ return inject_node(ret, node)
@@ -0,0 +1,154 @@
1
+ """Submodule defining parsers for classes from pyVHDLModel.Base."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "parse_direction",
7
+ "parse_mode",
8
+ "parse_simple_range",
9
+ "parse_waveform_element",
10
+ ]
11
+
12
+ from typing import TYPE_CHECKING
13
+
14
+ import pyVHDLModel
15
+ from pyVHDLModel.Base import SimpleRange, WaveformElement
16
+
17
+ if TYPE_CHECKING:
18
+ from tree_sitter import Node
19
+
20
+ from pyVHDLModelTreesitter._parse import parse_simple_expression
21
+ from pyVHDLModelTreesitter.error import (
22
+ NodeExtraChildError,
23
+ NodeMissingChildError,
24
+ NodeTextIsInvalidError,
25
+ NodeTextIsNoneError,
26
+ NotImplementedWarning,
27
+ )
28
+ from pyVHDLModelTreesitter.queries._protocol import inject_node
29
+
30
+
31
+ def parse_direction(string: str) -> pyVHDLModel.Base.Direction | None:
32
+ """
33
+ Parse a string as a direction.
34
+
35
+ This will accept any mix of the following:
36
+ - Incorrect capitalisation
37
+ - "tO"
38
+ - "To"
39
+ - Split words with whitespace
40
+ - "down to"
41
+ """
42
+ # TODO: make a PR on pyVHDLModel to add this
43
+ string = "".join(string.split()).lower().capitalize()
44
+ if string == "Downto":
45
+ string = "DownTo"
46
+ try:
47
+ return pyVHDLModel.Base.Direction[string]
48
+ except IndexError:
49
+ return None
50
+
51
+
52
+ def parse_mode(string: str) -> pyVHDLModel.Base.Mode | None:
53
+ """
54
+ Parse a string as a mode.
55
+
56
+ This will accept any mix of the following:
57
+ - Incorrect capitalisation
58
+ - "IN"
59
+ - "iN"
60
+ - "in"
61
+ - Split words with whitespace
62
+ - "in out"
63
+ """
64
+ # TODO: make a PR on pyVHDLModel to add this
65
+ string = "".join(string.split()).lower().capitalize()
66
+ if string == "Inout":
67
+ string = "InOut"
68
+ try:
69
+ return pyVHDLModel.Base.Mode[string]
70
+ except IndexError:
71
+ return None
72
+
73
+
74
+ def parse_simple_range(node: Node) -> SimpleRange | None: # ruff: ignore[complex-structure, too-many-branches]
75
+ """
76
+ Create a SimpleRange from a treesitter node.
77
+
78
+ Raises
79
+ ------
80
+ NodeExtraChildError:
81
+ If `node.children` does not have 2 elements.
82
+ NodeMissingChildError:
83
+ If `node.type` is not `simple_range`.
84
+ NodeTextIsInvalidError:
85
+ If the direction in `node` could not be parsed.
86
+ NodeTextIsNoneError:
87
+ If `node` or any relevant subnode doesn't define `text`.
88
+
89
+ """
90
+ if node.type != "simple_range":
91
+ raise NodeMissingChildError(node, "simple_range")
92
+ if node.text is None or len(node.text) == 0:
93
+ raise NodeTextIsNoneError(node)
94
+ if len(node.children) != 3: # ruff: ignore[magic-value-comparison]
95
+ raise NodeExtraChildError(node, "all children", 3)
96
+ left = node.child(0)
97
+ if left is None:
98
+ raise NodeMissingChildError(node, "first-child")
99
+ if left.type != "simple_expression":
100
+ NotImplementedWarning.warn_child_type(left)
101
+ return None
102
+ if left.text is None or len(left.text) == 0:
103
+ raise NodeTextIsNoneError(left)
104
+ direction_node = node.child(1)
105
+ if direction_node is None:
106
+ raise NodeMissingChildError(node, "second-child")
107
+ if len(direction_node.type) == 0:
108
+ NotImplementedWarning.warn_child_type(direction_node)
109
+ return None
110
+ if direction_node.text is None or len(direction_node.text) == 0:
111
+ raise NodeTextIsNoneError(direction_node)
112
+ direction_str = direction_node.text.decode("utf-8")
113
+ right = node.child(2)
114
+ if right is None:
115
+ raise NodeMissingChildError(node, "third-child")
116
+ if right.type != "simple_expression":
117
+ NotImplementedWarning.warn_child_type(right)
118
+ return None
119
+ if right.text is None or len(right.text) == 0:
120
+ raise NodeTextIsNoneError(right)
121
+ left_expr = parse_simple_expression(left)
122
+ if left_expr is None:
123
+ return None
124
+ right_expr = parse_simple_expression(right)
125
+ if right_expr is None:
126
+ return None
127
+ direction = parse_direction(direction_str)
128
+ if direction is None:
129
+ raise NodeTextIsInvalidError(
130
+ node,
131
+ f"'{direction_str}' is not a valid VHDL direction",
132
+ )
133
+ return inject_node(SimpleRange(left_expr, right_expr, direction), node)
134
+
135
+
136
+ def parse_waveform_element(node: Node) -> WaveformElement | None:
137
+ """Create a WaveformElement from a treesitter node."""
138
+ if node.type != "waveform_element":
139
+ return None
140
+ simple_expression_node = None
141
+ for child in node.children:
142
+ if child.type == "simple_expression":
143
+ simple_expression_node = child
144
+ break
145
+ if simple_expression_node is None:
146
+ NotImplementedWarning.warn(
147
+ "waveform_element expects a 'simple_expression' child",
148
+ node,
149
+ )
150
+ return None
151
+ expression = parse_simple_expression(simple_expression_node)
152
+ if expression is None:
153
+ return None
154
+ return inject_node(WaveformElement(expression), node)