mirror of
https://github.com/mesonbuild/meson.git
synced 2026-06-30 19:57:45 +00:00
visit full ast for AstConditionLevel
Use the new `FullAstVisitor` for `AstConditionLevel`. This will allow proper formatting of `if / else / endif` and `foreach / endforeach` blocks.
This commit is contained in:
committed by
Dylan Baker
parent
be9e9af15a
commit
2a962ffd63
@@ -5,7 +5,7 @@
|
||||
# or an interpreter-based tool
|
||||
from __future__ import annotations
|
||||
|
||||
from .visitor import AstVisitor
|
||||
from .visitor import AstVisitor, FullAstVisitor
|
||||
import typing as T
|
||||
|
||||
if T.TYPE_CHECKING:
|
||||
@@ -78,32 +78,41 @@ class AstIDGenerator(AstVisitor):
|
||||
node.ast_id = name + '#' + str(self.counter[name])
|
||||
self.counter[name] += 1
|
||||
|
||||
class AstConditionLevel(AstVisitor):
|
||||
class AstConditionLevel(FullAstVisitor):
|
||||
def __init__(self) -> None:
|
||||
self.condition_level = 0
|
||||
|
||||
def visit_default_func(self, node: mparser.BaseNode) -> None:
|
||||
def enter_node(self, node: mparser.BaseNode) -> None:
|
||||
node.condition_level = self.condition_level
|
||||
|
||||
def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
|
||||
self.visit_default_func(node)
|
||||
self.condition_level += 1
|
||||
self.enter_node(node)
|
||||
node.foreach_.accept(self)
|
||||
for varname in node.varnames:
|
||||
varname.accept(self)
|
||||
for comma in node.commas:
|
||||
comma.accept(self)
|
||||
node.colon.accept(self)
|
||||
node.items.accept(self)
|
||||
self.condition_level += 1
|
||||
node.block.accept(self)
|
||||
self.condition_level -= 1
|
||||
|
||||
def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
|
||||
self.visit_default_func(node)
|
||||
for i in node.ifs:
|
||||
i.accept(self)
|
||||
if node.elseblock:
|
||||
self.condition_level += 1
|
||||
node.elseblock.accept(self)
|
||||
self.condition_level -= 1
|
||||
node.endforeach.accept(self)
|
||||
self.exit_node(node)
|
||||
|
||||
def visit_IfNode(self, node: mparser.IfNode) -> None:
|
||||
self.visit_default_func(node)
|
||||
self.condition_level += 1
|
||||
self.enter_node(node)
|
||||
node.if_.accept(self)
|
||||
node.condition.accept(self)
|
||||
self.condition_level += 1
|
||||
node.block.accept(self)
|
||||
self.condition_level -= 1
|
||||
self.exit_node(node)
|
||||
|
||||
def visit_ElseNode(self, node: mparser.ElseNode) -> None:
|
||||
self.enter_node(node)
|
||||
node.else_.accept(self)
|
||||
self.condition_level += 1
|
||||
node.block.accept(self)
|
||||
self.condition_level -= 1
|
||||
self.exit_node(node)
|
||||
|
||||
Reference in New Issue
Block a user