pyVHDLModelTreesitter 0.8.0__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 (78) hide show
  1. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/.gitignore +2 -1
  2. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/PKG-INFO +10 -5
  3. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/README.md +9 -4
  4. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/pyproject.toml +2 -1
  5. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Association.py +3 -3
  6. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Base.py +3 -3
  7. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Concurrent.py +58 -11
  8. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_DesignUnit.py +50 -16
  9. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Document.py +4 -3
  10. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Interface.py +6 -6
  11. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Object.py +90 -0
  12. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Sequential.py +172 -0
  13. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/_Type.py +134 -0
  14. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/__init__.py +14 -0
  15. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_parse.py +127 -23
  16. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_subtype_indication.py +4 -4
  17. pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/_errors.py → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/error.py +32 -0
  18. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/format.py +44 -20
  19. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/__init__.py +9 -0
  20. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/_generated_queries.py +193 -0
  21. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries}/_protocol.py +9 -6
  22. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/_query.py +117 -0
  23. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries}/_utils.py +2 -2
  24. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/aggregate.scm +7 -0
  25. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/constant_declaration.scm +1 -1
  26. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/else_statement.scm +3 -0
  27. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/enumeration_type_definition.scm +5 -0
  28. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/if_elsif_statement.scm +18 -0
  29. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/if_statement_block.scm +3 -0
  30. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/process_statement.scm +10 -0
  31. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/record_type_definition.scm +6 -0
  32. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/subtype_declaration.scm +4 -0
  33. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/type_declaration.scm +13 -0
  34. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/variable_declaration.scm +10 -0
  35. pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files/wait_statement.scm +13 -0
  36. pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/_Object.py +0 -83
  37. pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/__init__.py +0 -29
  38. pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/__init__.py +0 -29
  39. pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries/ignorable_parentheses.scm +0 -11
  40. pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/query.py +0 -256
  41. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/LICENSE +0 -0
  42. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/Expression.py +0 -0
  43. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Design.py +0 -0
  44. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/_Name.py +0 -0
  45. {pyvhdlmodeltreesitter-0.8.0 → pyvhdlmodeltreesitter-0.9.0}/src/pyVHDLModelTreesitter/py.typed +0 -0
  46. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/adding_expression.scm +0 -0
  47. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/architecture_definition.scm +0 -0
  48. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/association_element.scm +0 -0
  49. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/association_elements.scm +0 -0
  50. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/association_list_simple_range.scm +0 -0
  51. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/bit_string_literal.scm +0 -0
  52. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/component_declaration.scm +0 -0
  53. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/component_instantiation_statement.scm +0 -0
  54. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/concurrent_conditional_signal_assignment.scm +0 -0
  55. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/concurrent_simple_signal_assignment.scm +0 -0
  56. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/constrained_1d_array.scm +0 -0
  57. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/constrained_scalar.scm +0 -0
  58. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/design_units.scm +0 -0
  59. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/entity_declaration.scm +0 -0
  60. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/function_call.scm +0 -0
  61. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/indexed_name.scm +0 -0
  62. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/interface_declaration.scm +0 -0
  63. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/interface_declarations.scm +0 -0
  64. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/library_clauses.scm +0 -0
  65. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/library_namespaces.scm +0 -0
  66. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/logical_expression.scm +0 -0
  67. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/multiplying_expression.scm +0 -0
  68. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/package_declaration.scm +0 -0
  69. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/package_definition.scm +0 -0
  70. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/physical_literal.scm +0 -0
  71. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/relational_expression.scm +0 -0
  72. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/selected_names.scm +0 -0
  73. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/shift_expression.scm +0 -0
  74. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/signal_declaration.scm +0 -0
  75. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/simple_subtype.scm +0 -0
  76. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/type_conversion.scm +0 -0
  77. {pyvhdlmodeltreesitter-0.8.0/src/pyVHDLModelTreesitter/treesitter/queries → pyvhdlmodeltreesitter-0.9.0/src/pyVHDLModelTreesitter/queries/query-files}/unary_expression.scm +0 -0
  78. {pyvhdlmodeltreesitter-0.8.0/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.8.0
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
@@ -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,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pyVHDLModelTreesitter"
7
- version = "0.8.0"
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"
@@ -89,6 +89,7 @@ dependencies = [
89
89
  python = ["3.11", "3.12", "3.13", "3.14"]
90
90
 
91
91
  [tool.mypy]
92
+ allow_redefinition = true
92
93
  implicit_reexport = true
93
94
  scripts_are_modules = true
94
95
  strict = true
@@ -13,12 +13,12 @@ from pyVHDLModel.Name import OpenName
13
13
  from pyVHDLModel.Symbol import SignalSymbol
14
14
 
15
15
  from pyVHDLModelTreesitter._Name import parse_name
16
- from pyVHDLModelTreesitter.treesitter import (
16
+ from pyVHDLModelTreesitter.queries import AssociationElement
17
+ from pyVHDLModelTreesitter.queries._protocol import inject_node
18
+ from pyVHDLModelTreesitter.queries._utils import (
17
19
  get_node,
18
20
  get_node_text,
19
- inject_node,
20
21
  )
21
- from pyVHDLModelTreesitter.treesitter.query import AssociationElement
22
22
 
23
23
  if TYPE_CHECKING:
24
24
  import pyVHDLModel
@@ -17,15 +17,15 @@ from pyVHDLModel.Base import SimpleRange, WaveformElement
17
17
  if TYPE_CHECKING:
18
18
  from tree_sitter import Node
19
19
 
20
- from pyVHDLModelTreesitter._errors import (
20
+ from pyVHDLModelTreesitter._parse import parse_simple_expression
21
+ from pyVHDLModelTreesitter.error import (
21
22
  NodeExtraChildError,
22
23
  NodeMissingChildError,
23
24
  NodeTextIsInvalidError,
24
25
  NodeTextIsNoneError,
25
26
  NotImplementedWarning,
26
27
  )
27
- from pyVHDLModelTreesitter._parse import parse_simple_expression
28
- from pyVHDLModelTreesitter.treesitter import inject_node
28
+ from pyVHDLModelTreesitter.queries._protocol import inject_node
29
29
 
30
30
 
31
31
  def parse_direction(string: str) -> pyVHDLModel.Base.Direction | None:
@@ -7,6 +7,7 @@ __all__ = [
7
7
  "parse_concurrent_conditional_signal_assignment",
8
8
  "parse_concurrent_simple_signal_assignment",
9
9
  "parse_entity_instantiation",
10
+ "parse_process",
10
11
  ]
11
12
 
12
13
  from typing import TYPE_CHECKING
@@ -20,6 +21,7 @@ from pyVHDLModel.Concurrent import (
20
21
  ConcurrentConditionalSignalAssignment,
21
22
  ConcurrentSimpleSignalAssignment,
22
23
  EntityInstantiation,
24
+ ProcessStatement,
23
25
  )
24
26
  from pyVHDLModel.Symbol import (
25
27
  ArchitectureSymbol,
@@ -30,24 +32,31 @@ from pyVHDLModel.Symbol import (
30
32
 
31
33
  from pyVHDLModelTreesitter._Association import parse_association_item
32
34
  from pyVHDLModelTreesitter._Base import parse_waveform_element
33
- from pyVHDLModelTreesitter._errors import NotImplementedWarning
34
35
  from pyVHDLModelTreesitter._Name import parse_name
35
- from pyVHDLModelTreesitter.treesitter import (
36
- get_node,
37
- get_node_text,
38
- get_nodes,
39
- inject_node,
40
- sort_into_text_order,
41
- )
42
- from pyVHDLModelTreesitter.treesitter.query import (
36
+ from pyVHDLModelTreesitter._Object import parse_variable
37
+ from pyVHDLModelTreesitter._Sequential import parse_sequential_block
38
+ from pyVHDLModelTreesitter.error import NotImplementedWarning
39
+ from pyVHDLModelTreesitter.queries import (
43
40
  ComponentInstantiationStatement,
44
41
  )
45
- from pyVHDLModelTreesitter.treesitter.query import (
42
+ from pyVHDLModelTreesitter.queries import (
46
43
  ConcurrentConditionalSignalAssignment as ConcurrentConditionalSignalAssignmentQuery,
47
44
  )
48
- from pyVHDLModelTreesitter.treesitter.query import (
45
+ from pyVHDLModelTreesitter.queries import (
49
46
  ConcurrentSimpleSignalAssignment as ConcurrentSimpleSignalAssignmentQuery,
50
47
  )
48
+ from pyVHDLModelTreesitter.queries import (
49
+ ProcessStatement as ProcessStatementQuery,
50
+ )
51
+ from pyVHDLModelTreesitter.queries._protocol import (
52
+ inject_node,
53
+ sort_into_text_order,
54
+ )
55
+ from pyVHDLModelTreesitter.queries._utils import (
56
+ get_node,
57
+ get_node_text,
58
+ get_nodes,
59
+ )
51
60
 
52
61
  if TYPE_CHECKING:
53
62
  import tree_sitter
@@ -190,3 +199,41 @@ def parse_entity_instantiation(
190
199
  ),
191
200
  node,
192
201
  )
202
+
203
+
204
+ def parse_process(
205
+ node: tree_sitter.Node,
206
+ ) -> ProcessStatement | None:
207
+ """Create a `ProcessStatement` from a treesitter node."""
208
+ captures = ProcessStatementQuery.capture(node)
209
+ label_node = get_node(node, captures, "label", optional=True)
210
+ label = get_node_text(label_node) if label_node is not None else None
211
+ sensitivity_names = captures.get("sensitivity_name", [])
212
+ sensitivity_list = None
213
+ if sensitivity_names:
214
+ sensitivity_list = [
215
+ parse_name(get_node_text(name_node))
216
+ for name_node in sort_into_text_order(sensitivity_names)
217
+ ]
218
+ body_node = get_node(node, captures, "body")
219
+ statements = parse_sequential_block(body_node)
220
+ declared_items = None
221
+ head_node = get_node(node, captures, "head", optional=True)
222
+ if head_node is not None:
223
+ declared_items = [
224
+ v
225
+ for child in head_node.children
226
+ if child.type == "variable_declaration"
227
+ if (v := parse_variable(child)) is not None
228
+ ]
229
+ return inject_node(
230
+ ProcessStatement(
231
+ # TODO: label is incorrectly `str` rather than `Nullable[str]`
232
+ label=label,
233
+ declaredItems=declared_items,
234
+ statements=statements,
235
+ sensitivityList=sensitivity_list,
236
+ documentation="",
237
+ ),
238
+ node,
239
+ )
@@ -18,7 +18,7 @@ from pyVHDLModel.DesignUnit import (
18
18
  UseClause,
19
19
  )
20
20
  from pyVHDLModel.Name import AllName, SimpleName
21
- from pyVHDLModel.Object import Constant, Signal
21
+ from pyVHDLModel.Object import Constant, DeferredConstant, Signal
22
22
  from pyVHDLModel.Symbol import (
23
23
  AllPackageMembersReferenceSymbol,
24
24
  EntitySymbol,
@@ -27,16 +27,19 @@ from pyVHDLModel.Symbol import (
27
27
  PackageReferenceSymbol,
28
28
  PackageSymbol,
29
29
  )
30
+ from pyVHDLModel.Type import (
31
+ EnumeratedType,
32
+ IntegerType,
33
+ RecordType,
34
+ Subtype,
35
+ )
30
36
 
31
37
  from pyVHDLModelTreesitter._Concurrent import (
32
38
  parse_component_instantiation,
33
39
  parse_concurrent_conditional_signal_assignment,
34
40
  parse_concurrent_simple_signal_assignment,
35
41
  parse_entity_instantiation,
36
- )
37
- from pyVHDLModelTreesitter._errors import (
38
- NodeExtraChildError,
39
- NotImplementedWarning,
42
+ parse_process,
40
43
  )
41
44
  from pyVHDLModelTreesitter._Interface import (
42
45
  parse_generic_constant_interface_item,
@@ -44,14 +47,15 @@ from pyVHDLModelTreesitter._Interface import (
44
47
  )
45
48
  from pyVHDLModelTreesitter._Name import parse_name
46
49
  from pyVHDLModelTreesitter._Object import parse_constant, parse_signal
47
- from pyVHDLModelTreesitter.treesitter import (
48
- get_node,
49
- get_node_text,
50
- get_nodes,
51
- inject_node,
52
- sort_into_text_order,
50
+ from pyVHDLModelTreesitter._Type import (
51
+ parse_subtype_declaration,
52
+ parse_type_declaration,
53
+ )
54
+ from pyVHDLModelTreesitter.error import (
55
+ NodeExtraChildError,
56
+ NotImplementedWarning,
53
57
  )
54
- from pyVHDLModelTreesitter.treesitter.query import (
58
+ from pyVHDLModelTreesitter.queries import (
55
59
  ArchitectureDefinition,
56
60
  EntityDeclaration,
57
61
  InterfaceDeclarations,
@@ -62,9 +66,18 @@ from pyVHDLModelTreesitter.treesitter.query import (
62
66
  SelectedNames,
63
67
  UseClauses,
64
68
  )
65
- from pyVHDLModelTreesitter.treesitter.query import (
69
+ from pyVHDLModelTreesitter.queries import (
66
70
  ComponentDeclaration as ComponentDeclarationQuery,
67
71
  )
72
+ from pyVHDLModelTreesitter.queries._protocol import (
73
+ inject_node,
74
+ sort_into_text_order,
75
+ )
76
+ from pyVHDLModelTreesitter.queries._utils import (
77
+ get_node,
78
+ get_node_text,
79
+ get_nodes,
80
+ )
68
81
 
69
82
  if TYPE_CHECKING:
70
83
  from collections.abc import Iterable
@@ -180,10 +193,19 @@ def parse_use_clauses(node: tree_sitter.Node) -> list[UseClause]:
180
193
  return ret
181
194
 
182
195
 
183
- Declarations = Component | Constant | Signal
196
+ Declarations = (
197
+ Component
198
+ | Constant
199
+ | DeferredConstant
200
+ | EnumeratedType
201
+ | IntegerType
202
+ | RecordType
203
+ | Signal
204
+ | Subtype
205
+ )
184
206
 
185
207
 
186
- def parse_declarations(node: tree_sitter.Node) -> list[Declarations]:
208
+ def parse_declarations(node: tree_sitter.Node) -> list[Declarations]: # ruff: ignore[complex-structure, too-many-branches]
187
209
  ret: list[Declarations] = []
188
210
  for child in node.children:
189
211
  if child.type == "constant_declaration":
@@ -194,6 +216,14 @@ def parse_declarations(node: tree_sitter.Node) -> list[Declarations]:
194
216
  signal = parse_signal(child)
195
217
  if signal is not None:
196
218
  ret.append(signal)
219
+ elif child.type == "subtype_declaration":
220
+ subtype = parse_subtype_declaration(child)
221
+ if subtype is not None:
222
+ ret.append(subtype)
223
+ elif child.type == "type_declaration":
224
+ td = parse_type_declaration(child)
225
+ if td is not None:
226
+ ret.append(td)
197
227
  elif child.type == "component_declaration":
198
228
  component = parse_component(child)
199
229
  if component is not None:
@@ -217,7 +247,7 @@ def _is_component_instantiation(node: tree_sitter.Node) -> bool:
217
247
  return False
218
248
 
219
249
 
220
- def parse_architecture( # ruff: ignore[complex-structure]
250
+ def parse_architecture( # ruff: ignore[complex-structure, too-many-branches]
221
251
  node: tree_sitter.Node,
222
252
  *,
223
253
  context_items: Iterable[LibraryClause | UseClause] = [],
@@ -250,6 +280,10 @@ def parse_architecture( # ruff: ignore[complex-structure]
250
280
  ccsa = parse_concurrent_conditional_signal_assignment(statement_node)
251
281
  if ccsa is not None:
252
282
  statements.append(ccsa)
283
+ elif statement_node.type == "process_statement":
284
+ ps = parse_process(statement_node)
285
+ if ps is not None:
286
+ statements.append(ps)
253
287
  elif statement_node.type == "begin":
254
288
  continue
255
289
  else:
@@ -19,9 +19,10 @@ from pyVHDLModelTreesitter._DesignUnit import (
19
19
  parse_package_body,
20
20
  parse_use_clauses,
21
21
  )
22
- from pyVHDLModelTreesitter._errors import NodeMissingChildError, NotImplementedWarning
23
- from pyVHDLModelTreesitter.treesitter._utils import pretty_sexpr
24
- from pyVHDLModelTreesitter.treesitter.query import PARSER, DesignUnits
22
+ from pyVHDLModelTreesitter.error import NodeMissingChildError, NotImplementedWarning
23
+ from pyVHDLModelTreesitter.queries import DesignUnits
24
+ from pyVHDLModelTreesitter.queries._query import PARSER
25
+ from pyVHDLModelTreesitter.queries._utils import pretty_sexpr
25
26
 
26
27
 
27
28
  def _design_unit_sort_key(du: DesignUnit) -> tuple[str, str]:
@@ -20,19 +20,19 @@ if TYPE_CHECKING:
20
20
  from pyVHDLModel.Symbol import SubtypeSymbol
21
21
 
22
22
  from pyVHDLModelTreesitter._Base import parse_mode
23
- from pyVHDLModelTreesitter._errors import (
23
+ from pyVHDLModelTreesitter._parse import parse_simple_expression
24
+ from pyVHDLModelTreesitter._subtype_indication import parse_subtype_indication
25
+ from pyVHDLModelTreesitter.error import (
24
26
  NodeExtraChildError,
25
27
  NodeMissingChildError,
26
28
  NotImplementedWarning,
27
29
  )
28
- from pyVHDLModelTreesitter._parse import parse_simple_expression
29
- from pyVHDLModelTreesitter._subtype_indication import parse_subtype_indication
30
- from pyVHDLModelTreesitter.treesitter import (
30
+ from pyVHDLModelTreesitter.queries import InterfaceDeclaration
31
+ from pyVHDLModelTreesitter.queries._protocol import inject_node
32
+ from pyVHDLModelTreesitter.queries._utils import (
31
33
  get_node,
32
34
  get_node_text,
33
- inject_node,
34
35
  )
35
- from pyVHDLModelTreesitter.treesitter.query import InterfaceDeclaration
36
36
 
37
37
  if TYPE_CHECKING:
38
38
  from tree_sitter import Node
@@ -0,0 +1,90 @@
1
+ """Submodule defining parsers for classes from pyVHDLModel.Object."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "parse_constant",
7
+ "parse_signal",
8
+ "parse_variable",
9
+ ]
10
+
11
+ from typing import TYPE_CHECKING, Any, TypeVar
12
+
13
+ from pyVHDLModel.Object import Constant, DeferredConstant, Signal, Variable
14
+
15
+ if TYPE_CHECKING:
16
+ import tree_sitter
17
+
18
+ from pyVHDLModelTreesitter._parse import parse_conditional_expression
19
+ from pyVHDLModelTreesitter._subtype_indication import parse_subtype_indication
20
+ from pyVHDLModelTreesitter.queries import (
21
+ ConstantDeclaration,
22
+ SignalDeclaration,
23
+ VariableDeclaration,
24
+ )
25
+ from pyVHDLModelTreesitter.queries._protocol import inject_node
26
+ from pyVHDLModelTreesitter.queries._utils import (
27
+ get_node,
28
+ get_node_text,
29
+ get_nodes,
30
+ )
31
+
32
+ T = TypeVar("T", Constant, Signal, Variable)
33
+
34
+
35
+ def _parse_object(
36
+ node: tree_sitter.Node,
37
+ cls: type[T],
38
+ ) -> T | None:
39
+ """Parse a constant, signal, or variable declaration."""
40
+ query: type[ConstantDeclaration | SignalDeclaration | VariableDeclaration]
41
+ if cls is Constant:
42
+ query = ConstantDeclaration
43
+ elif cls is Signal:
44
+ query = SignalDeclaration
45
+ else:
46
+ query = VariableDeclaration
47
+ captures = query.capture(node)
48
+ name_nodes = get_nodes(node, captures, "name")
49
+ identifiers = [get_node_text(name_node) for name_node in name_nodes]
50
+ subtype_node = get_node(node, captures, "type")
51
+ subtype = parse_subtype_indication(subtype_node)
52
+ if subtype is None:
53
+ return None
54
+ value_node = get_node(node, captures, "value", optional=True)
55
+ value: Any = None
56
+ if value_node is not None:
57
+ value = parse_conditional_expression(value_node)
58
+ if value is None:
59
+ return None
60
+ return inject_node(
61
+ cls(identifiers, subtype, value, documentation=""),
62
+ node,
63
+ )
64
+
65
+
66
+ def parse_constant(node: tree_sitter.Node) -> Constant | DeferredConstant | None:
67
+ """Create a Constant or DeferredConstant from a treesitter node."""
68
+ result = _parse_object(node, Constant)
69
+ if result is None:
70
+ return None
71
+ if result._defaultExpression is None: # ruff: ignore[private-member-access]
72
+ return inject_node(
73
+ DeferredConstant(
74
+ result._identifiers, # ruff: ignore[private-member-access]
75
+ result._subtype, # ruff: ignore[private-member-access]
76
+ documentation="",
77
+ ),
78
+ node,
79
+ )
80
+ return result
81
+
82
+
83
+ def parse_signal(node: tree_sitter.Node) -> Signal | None:
84
+ """Create a Signal from a treesitter node."""
85
+ return _parse_object(node, Signal)
86
+
87
+
88
+ def parse_variable(node: tree_sitter.Node) -> Variable | None:
89
+ """Create a Variable from a treesitter node."""
90
+ return _parse_object(node, Variable)