in linkis-computation-governance/linkis-computation-governance-common/src/main/scala/org/apache/linkis/governance/common/paser/CodeParser.scala [143:201]
def parsePythonCode(code: String): Array[String] = {
val bracketStack = new mutable.Stack[String]
val codeBuffer = new ArrayBuffer[String]()
val statementBuffer = new ArrayBuffer[String]()
var notDoc = true
// quotationMarks is used to optimize the three quotes problem
var quotationMarks: Boolean = false
code.split("\n").foreach {
case "" =>
case l if l.trim.contains("\"\"\"") || l.trim.contains("""'''""") =>
quotationMarks = !quotationMarks
statementBuffer.append(l)
recordBrackets(bracketStack, l)
case l if quotationMarks => statementBuffer.append(l)
// quotationMarks is used to optimize the three quotes problem(quotationMarks用来优化三引号问题)
// recordBrackets(bracketStack, l)
case l if notDoc && l.startsWith("#") =>
case l
if statementBuffer.nonEmpty && StringUtils
.isNotBlank(statementBuffer.last) && statementBuffer.last.endsWith("""\""") =>
statementBuffer.append(l)
case l if notDoc && l.startsWith(" ") =>
statementBuffer.append(l)
recordBrackets(bracketStack, l.trim)
case l if notDoc && l.startsWith("\t") =>
statementBuffer.append(l)
recordBrackets(bracketStack, l.trim)
case l if notDoc && l.startsWith("@") =>
if (
statementBuffer.nonEmpty && bracketStack.isEmpty && StringUtils
.isNotBlank(statementBuffer.last) && !statementBuffer.last.startsWith("@")
) {
codeBuffer.append(statementBuffer.mkString("\n"))
statementBuffer.clear()
}
statementBuffer.append(l)
recordBrackets(bracketStack, l.trim)
case l if notDoc && l.startsWith("else") => // LOG.info("I am else")
statementBuffer.append(l)
recordBrackets(bracketStack, l.trim)
case l if notDoc && l.startsWith("elif") => // LOG.info("I am elif")
statementBuffer.append(l)
recordBrackets(bracketStack, l.trim)
case l if notDoc && StringUtils.isNotBlank(l) =>
if (
statementBuffer.nonEmpty && bracketStack.isEmpty && StringUtils
.isNotBlank(statementBuffer.last) && !statementBuffer.last.startsWith("@")
) {
codeBuffer.append(statementBuffer.mkString("\n"))
statementBuffer.clear()
}
// statementBuffer.append("%python")
statementBuffer.append(l)
recordBrackets(bracketStack, l.trim)
case _ =>
}
if (statementBuffer.nonEmpty) codeBuffer.append(statementBuffer.mkString("\n"))
codeBuffer.toArray
}