agent-codinglanguage-mapper 1.0.0__py3-none-any.whl

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 (42) hide show
  1. agent_codinglanguage_mapper/__init__.py +20 -0
  2. agent_codinglanguage_mapper/__main__.py +4 -0
  3. agent_codinglanguage_mapper/_version.py +2 -0
  4. agent_codinglanguage_mapper/adapters/__init__.py +4 -0
  5. agent_codinglanguage_mapper/adapters/delphi.py +822 -0
  6. agent_codinglanguage_mapper/adapters/delphi_frontend/__init__.py +6 -0
  7. agent_codinglanguage_mapper/adapters/delphi_frontend/comment_builder.py +29 -0
  8. agent_codinglanguage_mapper/adapters/delphi_frontend/consts.py +345 -0
  9. agent_codinglanguage_mapper/adapters/delphi_frontend/grammar.py +460 -0
  10. agent_codinglanguage_mapper/adapters/delphi_frontend/lark_builder.py +2674 -0
  11. agent_codinglanguage_mapper/adapters/delphi_frontend/lark_tokens.py +237 -0
  12. agent_codinglanguage_mapper/adapters/delphi_frontend/lsp_server.py +1832 -0
  13. agent_codinglanguage_mapper/adapters/delphi_frontend/nodes.py +371 -0
  14. agent_codinglanguage_mapper/adapters/delphi_frontend/parser.py +193 -0
  15. agent_codinglanguage_mapper/adapters/delphi_frontend/preprocessor.py +997 -0
  16. agent_codinglanguage_mapper/adapters/delphi_frontend/project_discovery.py +518 -0
  17. agent_codinglanguage_mapper/adapters/delphi_frontend/project_indexer.py +319 -0
  18. agent_codinglanguage_mapper/adapters/delphi_frontend/semantic.py +375 -0
  19. agent_codinglanguage_mapper/adapters/delphi_frontend/semantic_builder.py +1384 -0
  20. agent_codinglanguage_mapper/adapters/delphi_frontend/source_reader.py +17 -0
  21. agent_codinglanguage_mapper/adapters/delphi_frontend/workspace.py +67 -0
  22. agent_codinglanguage_mapper/adapters/tree_sitter.py +1722 -0
  23. agent_codinglanguage_mapper/cli.py +138 -0
  24. agent_codinglanguage_mapper/discovery.py +1328 -0
  25. agent_codinglanguage_mapper/indexer.py +1102 -0
  26. agent_codinglanguage_mapper/integration.py +186 -0
  27. agent_codinglanguage_mapper/lsp_server.py +413 -0
  28. agent_codinglanguage_mapper/lsp_service.py +447 -0
  29. agent_codinglanguage_mapper/mapper.py +596 -0
  30. agent_codinglanguage_mapper/models.py +101 -0
  31. agent_codinglanguage_mapper/protocol.py +152 -0
  32. agent_codinglanguage_mapper/rendering.py +153 -0
  33. agent_codinglanguage_mapper/templates/opencode/plugins/codebase_map.ts +191 -0
  34. agent_codinglanguage_mapper/templates/skill/SKILL.md +52 -0
  35. agent_codinglanguage_mapper/worker.py +29 -0
  36. agent_codinglanguage_mapper/workspace.py +114 -0
  37. agent_codinglanguage_mapper-1.0.0.dist-info/METADATA +383 -0
  38. agent_codinglanguage_mapper-1.0.0.dist-info/RECORD +42 -0
  39. agent_codinglanguage_mapper-1.0.0.dist-info/WHEEL +5 -0
  40. agent_codinglanguage_mapper-1.0.0.dist-info/entry_points.txt +2 -0
  41. agent_codinglanguage_mapper-1.0.0.dist-info/licenses/LICENSE +373 -0
  42. agent_codinglanguage_mapper-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,17 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+
6
+ def read_source_text(path: Path) -> str:
7
+ data = path.read_bytes()
8
+ if data.startswith(b'\xff\xfe') or data.startswith(b'\xfe\xff'):
9
+ text = data.decode('utf-16')
10
+ elif data.startswith(b'\xef\xbb\xbf'):
11
+ text = data.decode('utf-8-sig')
12
+ else:
13
+ try:
14
+ text = data.decode('utf-8')
15
+ except UnicodeDecodeError:
16
+ text = data.decode('latin-1')
17
+ return text.replace('\r\n', '\n').replace('\r', '\n')
@@ -0,0 +1,67 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Iterable
5
+
6
+ from .consts import AttributeName
7
+ from .nodes import SyntaxNode
8
+ from .parser import DelphiParser
9
+ from .semantic import Scope, ScopeKind, SymbolIndex
10
+ from .semantic_builder import SemanticBuilder, SemanticModel
11
+
12
+
13
+ @dataclass
14
+ class WorkspaceSemanticResult:
15
+ models: dict[str, SemanticModel]
16
+ index: SymbolIndex
17
+
18
+
19
+ def build_workspace_semantics(
20
+ sources: dict[str, str],
21
+ *,
22
+ include_paths: Iterable[str] = (),
23
+ defines: Iterable[str] = (),
24
+ preprocessor_options=None,
25
+ collect_references: bool = True,
26
+ ) -> WorkspaceSemanticResult:
27
+ parser = DelphiParser(
28
+ include_paths=include_paths,
29
+ defines=defines,
30
+ preprocessor_options=preprocessor_options,
31
+ )
32
+ roots: dict[str, SyntaxNode] = {}
33
+ for file_name, text in sources.items():
34
+ result = parser.parse(text, file_name, build_semantic=False)
35
+ roots[file_name] = result.root
36
+
37
+ return build_workspace_semantics_from_roots(
38
+ roots,
39
+ collect_references=collect_references,
40
+ )
41
+
42
+
43
+ def build_workspace_semantics_from_roots(
44
+ roots: dict[str, SyntaxNode],
45
+ *,
46
+ collect_references: bool = True,
47
+ ) -> WorkspaceSemanticResult:
48
+ """Build project semantics from syntax roots that have already been parsed."""
49
+
50
+ index = SymbolIndex()
51
+ scopes: dict[str, Scope] = {}
52
+ for file_name, root in roots.items():
53
+ unit_name = root.get_attribute(AttributeName.anName) or file_name
54
+ unit_scope = Scope(kind=ScopeKind.UNIT, name=unit_name)
55
+ index.register_unit(unit_name, unit_scope, index_symbols=False)
56
+ scopes[file_name] = unit_scope
57
+
58
+ builder = SemanticBuilder(collect_references=collect_references)
59
+ for file_name, root in roots.items():
60
+ builder.declare(root, index=index, unit_scope=scopes[file_name], reset_state=False)
61
+
62
+ models: dict[str, SemanticModel] = {}
63
+ for file_name, root in roots.items():
64
+ model = builder.resolve(root, scopes[file_name])
65
+ models[file_name] = model
66
+
67
+ return WorkspaceSemanticResult(models=models, index=index)