[gemma4] update parser logic

This commit is contained in:
2026-06-19 17:52:31 +02:00
parent 64a890ac03
commit d6bd5f4096
+28 -24
View File
@@ -44,38 +44,42 @@ class SkillParser:
def _traverse_tree(
self,
node,
root_node,
content: str,
diagnostics: list[Diagnostic],
symbols: list[DocumentSymbol]
) -> None:
"""Recursively traverses the AST to find errors and symbols."""
# 1. Handle Errors (Diagnostics)
if node.type in ERROR_NODE_TYPES:
start_point = node.start_point
end_point = node.end_point
"""Iteratively traverses the AST to find errors and symbols."""
stack = [root_node]
while stack:
node = stack.pop()
diagnostics.append(
Diagnostic(
range=Range(
start=Position(start_point[0], start_point[1]),
end=Position(end_point[0], end_point[1])
),
message=f"Syntax error: unexpected {node.type} token",
severity=DiagnosticSeverity.Error,
# 1. Handle Errors (Diagnostics)
if node.type in ERROR_NODE_TYPES:
start_point = node.start_point
end_point = node.end_point
diagnostics.append(
Diagnostic(
range=Range(
start=Position(start_point[0], start_point[1]),
end=Position(end_point[0], end_point[1])
),
message=f"Syntax error: unexpected {node.type} token",
severity=DiagnosticSeverity.Error,
)
)
)
# 2. Handle Symbols (Document Symbols / Outline)
if self._is_symbol_node(node):
symbol = self._create_document_symbol(node, content)
if symbol:
symbols.append(symbol)
# 2. Handle Symbols (Document Symbols / Outline)
if self._is_symbol_node(node):
symbol = self._create_document_symbol(node, content)
if symbol:
symbols.append(symbol)
# 3. Continue traversal
for child in node.children:
self._traverse_tree(child, content, diagnostics, symbols)
# 3. Continue traversal - push children in reverse order to maintain original DFS order
for child in reversed(node.children):
stack.append(child)
def _is_symbol_node(self, node) -> bool:
"""Determines if a node is significant enough to be an outline symbol."""