idlize
43 строки · 1.2 Кб
1/*
2* Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3* Licensed under the Apache License, Version 2.0 (the "License");
4* you may not use this file except in compliance with the License.
5* You may obtain a copy of the License at
6*
7* http://www.apache.org/licenses/LICENSE-2.0
8*
9* Unless required by applicable law or agreed to in writing, software
10* distributed under the License is distributed on an "AS IS" BASIS,
11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12* See the License for the specific language governing permissions and
13* limitations under the License.
14*/
15
16import * as ts from 'typescript';
17
18export abstract class AbstractVisitor {
19constructor(
20public ctx: ts.TransformationContext
21) {}
22
23indentation = 0
24
25withIndentation<T>(exec: () => T) {
26this.indentation++
27const result = exec()
28this.indentation--
29return result
30}
31
32abstract visitor(node: ts.Node): ts.Node
33
34visitEachChild<T extends ts.Node>(node: T): T {
35return this.withIndentation(() =>
36ts.visitEachChild(
37node,
38it => this.visitor(it),
39this.ctx
40)
41)
42}
43}
44