pyVHDLModelTreesitter 0.2.1__tar.gz → 0.2.2__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.
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/PKG-INFO +1 -1
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/pyproject.toml +1 -1
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/__init__.py +2 -1
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/query.py +38 -34
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/.gitignore +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/LICENSE +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/README.md +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Base.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/DesignUnit.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Expression.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Interface.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Name.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Symbol.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/_error.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/_root.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/py.typed +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/__init__.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/_utils.py +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/queries/design_units.scm +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/queries/entity_declaration.scm +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/queries/interface_declaration.scm +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/queries/interface_declarations.scm +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/queries/library_clauses.scm +0 -0
- {pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/treesitter/queries/library_namespaces.scm +0 -0
- /pyvhdlmodeltreesitter-0.2.1/src/pyVHDLModelTreesitter/treesitter/queries/selected-names.scm → /pyvhdlmodeltreesitter-0.2.2/src/pyVHDLModelTreesitter/treesitter/queries/selected_names.scm +0 -0
- /pyvhdlmodeltreesitter-0.2.1/src/pyVHDLModelTreesitter/treesitter/queries/use-clauses.scm → /pyvhdlmodeltreesitter-0.2.2/src/pyVHDLModelTreesitter/treesitter/queries/use_clauses.scm +0 -0
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/__init__.py
RENAMED
|
@@ -15,9 +15,10 @@ __all__: list[str] = [
|
|
|
15
15
|
"Name",
|
|
16
16
|
"NodeTextIsNoneError",
|
|
17
17
|
"Symbol",
|
|
18
|
+
"treesitter",
|
|
18
19
|
]
|
|
19
20
|
|
|
20
|
-
from . import DesignUnit, Expression, Interface, Name, Symbol
|
|
21
|
+
from . import DesignUnit, Expression, Interface, Name, Symbol, treesitter
|
|
21
22
|
from ._error import ExtraNodeError, MissingNodeError, NodeTextIsNoneError
|
|
22
23
|
from ._root import Design, Document, Library
|
|
23
24
|
from .DesignUnit import Entity
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import re
|
|
5
6
|
from pathlib import Path
|
|
6
|
-
from typing import ClassVar
|
|
7
|
+
from typing import Any, ClassVar, Protocol
|
|
7
8
|
|
|
8
9
|
import tree_sitter
|
|
9
10
|
import tree_sitter_vhdl
|
|
@@ -11,79 +12,82 @@ import tree_sitter_vhdl
|
|
|
11
12
|
LANGUAGE = tree_sitter.Language(tree_sitter_vhdl.language())
|
|
12
13
|
PARSER = tree_sitter.Parser(LANGUAGE)
|
|
13
14
|
|
|
15
|
+
_FIND_END_OF_WORD = re.compile(r"(.)([A-Z][a-z]+)")
|
|
16
|
+
_FIND_START_OF_WORD = re.compile(r"([a-z0-9])([A-Z])")
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
|
|
19
|
+
def camel_case_to_lower_snake_case(name: str) -> str:
|
|
20
|
+
"""Convert camel case to lower snake case."""
|
|
21
|
+
s1 = _FIND_END_OF_WORD.sub(r"\1_\2", name)
|
|
22
|
+
return _FIND_START_OF_WORD.sub(r"\1_\2", s1).lower()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Query(Protocol):
|
|
16
26
|
"""Base class for all queries."""
|
|
17
27
|
|
|
18
28
|
FILE: ClassVar[Path]
|
|
19
29
|
TEXT: ClassVar[str]
|
|
20
30
|
QUERY: ClassVar[tree_sitter.Query]
|
|
21
31
|
|
|
32
|
+
def __init_subclass__(cls, **kwargs: Any) -> None: # noqa: ANN401
|
|
33
|
+
"""
|
|
34
|
+
Initialise subclass.
|
|
35
|
+
|
|
36
|
+
This requires `FILE` to be defined, and defines `TEXT` and `QUERY`.
|
|
37
|
+
|
|
38
|
+
Raises
|
|
39
|
+
------
|
|
40
|
+
TypeError:
|
|
41
|
+
If `FILE` is not a defined `ClassVar` of the subclass.
|
|
42
|
+
|
|
43
|
+
"""
|
|
44
|
+
super().__init_subclass__(**kwargs)
|
|
45
|
+
class_lower_snake_case = camel_case_to_lower_snake_case(cls.__name__)
|
|
46
|
+
cls.FILE = Path(__file__).parent / "queries" / f"{class_lower_snake_case}.scm"
|
|
47
|
+
if not cls.FILE.exists():
|
|
48
|
+
message = f"File '{cls.FILE}' does not exist"
|
|
49
|
+
raise TypeError(message)
|
|
50
|
+
cls.TEXT = cls.FILE.read_text()
|
|
51
|
+
cls.QUERY = tree_sitter.Query(LANGUAGE, cls.TEXT)
|
|
52
|
+
|
|
22
53
|
@classmethod
|
|
23
54
|
def capture(cls, node: tree_sitter.Node) -> dict[str, list[tree_sitter.Node]]:
|
|
24
55
|
"""Perform a capture on a given node."""
|
|
25
56
|
return tree_sitter.QueryCursor(cls.QUERY).captures(node)
|
|
26
57
|
|
|
58
|
+
@classmethod
|
|
59
|
+
def get_file(cls, name: str) -> Path:
|
|
60
|
+
"""Get the given query file."""
|
|
61
|
+
return Path(__file__).parent / "queries" / name
|
|
62
|
+
|
|
27
63
|
|
|
28
64
|
class DesignUnits(Query):
|
|
29
65
|
"""Class defining the query to get all design units."""
|
|
30
66
|
|
|
31
|
-
FILE = Path(__file__).parent / "queries" / "design_units.scm"
|
|
32
|
-
TEXT = FILE.read_text()
|
|
33
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
34
|
-
|
|
35
67
|
|
|
36
68
|
class EntityDeclaration(Query):
|
|
37
69
|
"""Class defining the query to expand a single entity declaration."""
|
|
38
70
|
|
|
39
|
-
FILE = Path(__file__).parent / "queries" / "entity_declaration.scm"
|
|
40
|
-
TEXT = FILE.read_text()
|
|
41
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
42
|
-
|
|
43
71
|
|
|
44
72
|
class InterfaceDeclaration(Query):
|
|
45
73
|
"""Class defining the query to expand a single interface declaration."""
|
|
46
74
|
|
|
47
|
-
FILE = Path(__file__).parent / "queries" / "interface_declaration.scm"
|
|
48
|
-
TEXT = FILE.read_text()
|
|
49
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
50
|
-
|
|
51
75
|
|
|
52
76
|
class InterfaceDeclarations(Query):
|
|
53
77
|
"""Class defining the query to get all interface declarations."""
|
|
54
78
|
|
|
55
|
-
FILE = Path(__file__).parent / "queries" / "interface_declarations.scm"
|
|
56
|
-
TEXT = FILE.read_text()
|
|
57
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
58
|
-
|
|
59
79
|
|
|
60
80
|
class LibraryClauses(Query):
|
|
61
81
|
"""Class defining the query to get all library clauses."""
|
|
62
82
|
|
|
63
|
-
FILE = Path(__file__).parent / "queries" / "library_clauses.scm"
|
|
64
|
-
TEXT = FILE.read_text()
|
|
65
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
66
|
-
|
|
67
83
|
|
|
68
84
|
class LibraryNamespaces(Query):
|
|
69
85
|
"""Class defining the query to get all library namespaces."""
|
|
70
86
|
|
|
71
|
-
FILE = Path(__file__).parent / "queries" / "library_namespaces.scm"
|
|
72
|
-
TEXT = FILE.read_text()
|
|
73
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
74
|
-
|
|
75
87
|
|
|
76
88
|
class SelectedNames(Query):
|
|
77
89
|
"""Class defining the query to get all selected names in a list."""
|
|
78
90
|
|
|
79
|
-
FILE = Path(__file__).parent / "queries" / "selected-names.scm"
|
|
80
|
-
TEXT = FILE.read_text()
|
|
81
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
82
|
-
|
|
83
91
|
|
|
84
92
|
class UseClauses(Query):
|
|
85
93
|
"""Class defining the query to get all use clauses."""
|
|
86
|
-
|
|
87
|
-
FILE = Path(__file__).parent / "queries" / "use-clauses.scm"
|
|
88
|
-
TEXT = FILE.read_text()
|
|
89
|
-
QUERY = tree_sitter.Query(LANGUAGE, TEXT)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Base.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/DesignUnit.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Expression.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Interface.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Name.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/Symbol.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/_error.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/_root.py
RENAMED
|
File without changes
|
{pyvhdlmodeltreesitter-0.2.1 → pyvhdlmodeltreesitter-0.2.2}/src/pyVHDLModelTreesitter/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|