feature #6: Implement named parameters

This commit is contained in:
2019-07-15 13:37:17 +02:00
parent b00f8cb5d0
commit e6b8e66b28
8 changed files with 263 additions and 17 deletions

View File

@@ -12,7 +12,7 @@ open class Function (
override var source: File? = null
init {
val functionRegex = """create .*(procedure|function) *(?<name>[^(\s]+)\s*\((?<params>(\s*((IN|OUT|INOUT|VARIADIC)?\s+)?([^\s,)]+\s+)?([^\s,)]+)(\s+(?:default\s|=)\s*[^\s,)]+)?\s*(,|(?=\))))*)\) *(?<return>RETURNS *[^ ]+)?"""
val functionRegex = """create (or replace )?(procedure|function) *(?<name>[^(\s]+)\s*\((?<params>(\s*((IN|OUT|INOUT|VARIADIC)?\s+)?([^\s,)]+\s+)?([^\s,)]+)(\s+(?:default\s|=)\s*[^\s,)]+)?\s*(,|(?=\))))*)\) *(?<return>RETURNS *[^ ]+)?"""
.toRegex(setOf(RegexOption.IGNORE_CASE, RegexOption.MULTILINE))
val paramsRegex = """\s*(?<param>((?<direction>IN|OUT|INOUT|VARIADIC)?\s+)?(?<name>[^\s,)]+\s+)?(?<type>[^\s,)]+)(\s+(?<default>default\s|=)\s*[^\s,)]+)?)\s*(,|$)"""
@@ -50,6 +50,12 @@ open class Function (
return "$name (" + parameters.joinToString(", ") + ") $returns"
}
fun getParametersIndexedByName(): Map<String, Parameter> {
return parameters.map {
it.name to it
}.toMap()
}
infix fun `has same definition` (other: Function): Boolean {
return other.getDefinition() == this.getDefinition()
}