aboutsummaryrefslogtreecommitdiff
path: root/ktlint-test/src/main/kotlin/com/github/shyiko/ktlint/test/package.kt
blob: a3c6b8372804be5c4742b3df3f6791ded9945219 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.github.shyiko.ktlint.test

import com.github.shyiko.ktlint.core.Rule
import org.jetbrains.kotlin.com.intellij.lang.ASTNode

val debugAST = {
    (System.getProperty("ktlintDebug") ?: System.getenv("KTLINT_DEBUG") ?: "")
        .toLowerCase().split(",").contains("ast")
}

class DumpAST : Rule("dump") {

    override fun visit(node: ASTNode, autoCorrect: Boolean,
        emit: (offset: Int, errorMessage: String, corrected: Boolean) -> Unit) {
        var level = -1
        var parent: ASTNode? = node
        do {
            level++
            parent = parent?.treeParent
        } while (parent != null)
        System.err.println("  ".repeat(level) + node.psi.javaClass.name + " (${node.elementType})" +
            (if (node.getChildren(null).isEmpty()) " | \"" + node.text.escape() + "\"" else ""))
    }

    private fun String.escape() =
        this.replace("\\", "\\\\").replace("\n", "\\n").replace("\t", "\\t").replace("\r", "\\r")
}