Skip to content

Commit

Permalink
feat(compiler): add query statement support in pattern action #16
Browse files Browse the repository at this point in the history
Added a new field 'isQueryStatement' in PatternAction and PatternActionTransform classes to identify query statements. Introduced a new QueryStatementProcessor class to handle query statement processing. Updated PatternActionProcessor to use QueryStatementProcessor for query statements and improved error handling for unknown pattern processor types.
  • Loading branch information
phodal committed Jun 23, 2024
1 parent 8b04548 commit 12fd4fd
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ open class HobbitHole(
// remove pattern sus
PatternAction.from(value)?.let {
val pattern = it.pattern.removeSurrounding("/")
variables[variable] = PatternActionTransform(variable, pattern, it.patternFuncs)
variables[variable] = PatternActionTransform(variable, pattern, it.patternFuncs, it.isQueryStatement)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.phodal.shirelang.compiler.patternaction.PatternActionFunc
data class PatternAction(
val pattern: String,
val patternFuncs: List<PatternActionFunc>,
val isQueryStatement: Boolean = false
) {
companion object {
/**
Expand All @@ -34,7 +35,7 @@ data class PatternAction(

is FrontMatterType.QueryStatement -> {
val action = value.value as? ShirePsiQueryStatement ?: return null
PatternAction("", action.toPatternActionFunc())
PatternAction("", action.toPatternActionFunc(), true)
}

else -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
* Each function output will be the input of the next function.
*/
fun execute(actionTransform: PatternActionTransform): String {
if (actionTransform.patternActionFuncs.isEmpty()) {
return ""
}

if (actionTransform.isQueryStatement) {
return QueryStatementProcessor(myProject, editor, hole).execute(actionTransform)
}

var input: Any = ""
// todo: update rules for input type
if (actionTransform.pattern.isNotBlank()) {
Expand Down Expand Up @@ -57,6 +65,7 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
(result as Array<String>).filter { line -> action.patterns.any { line.contains(it) } }
.joinToString("\n")
}

else -> {
(result as String).split("\n")
.filter { line -> action.patterns.any { line.contains(it) } }
Expand All @@ -75,6 +84,7 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
)
}
}

else -> {
(result as String).split("\n").joinToString("\n") { line ->
line.replace(
Expand All @@ -91,6 +101,7 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
is Array<*> -> {
(result as Array<String>).sorted().joinToString("\n")
}

else -> {
(result as String).split("\n").sorted().joinToString("\n")
}
Expand All @@ -102,6 +113,7 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
is Array<*> -> {
(result as Array<String>).distinct().joinToString("\n")
}

else -> {
(result as String).split("\n").distinct().joinToString("\n")
}
Expand All @@ -113,6 +125,7 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
is Array<*> -> {
(result as Array<String>).take(action.number.toInt()).joinToString("\n")
}

else -> {
(result as String).split("\n").take(action.number.toInt()).joinToString("\n")
}
Expand All @@ -124,6 +137,7 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
is Array<*> -> {
(result as Array<String>).takeLast(action.number.toInt()).joinToString("\n")
}

else -> {
(result as String).split("\n").takeLast(action.number.toInt()).joinToString("\n")
}
Expand All @@ -142,16 +156,9 @@ class PatternActionProcessor(val myProject: Project, val editor: Editor, val hol
action.variables
}

is PatternActionFunc.From -> {
logger<PatternActionProcessor>().info("Unsupported function: ${action.funcName}")
}

is PatternActionFunc.Where -> {
logger<PatternActionProcessor>().info("Unsupported function: ${action.funcName}")
}

is PatternActionFunc.Select -> {
logger<PatternActionProcessor>().info("Unsupported function: ${action.funcName}")
else -> {
logger<PatternActionProcessor>().error("Unknown pattern processor type: $action")
""
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,6 @@ class PatternActionTransform(
val variable: String,
val pattern: String,
val patternActionFuncs: List<PatternActionFunc>,
val isQueryStatement: Boolean = false
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.phodal.shirelang.compiler.patternaction

import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.phodal.shirelang.compiler.hobbit.HobbitHole

class QueryStatementProcessor(myProject: Project, editor: Editor, hole: HobbitHole) {
fun execute(transform: PatternActionTransform): String {
val fromStmt = transform.patternActionFuncs.find { it is PatternActionFunc.From } as PatternActionFunc.From
val selectStmt =
transform.patternActionFuncs.find { it is PatternActionFunc.Select } as PatternActionFunc.Select
val whereStmt = transform.patternActionFuncs.find { it is PatternActionFunc.Where } as PatternActionFunc.Where


return "Test"
}
}

0 comments on commit 12fd4fd

Please sign in to comment.