Files
divkit/client/ios/DivKit/Expressions/CalcExpression/CalcExpressionSymbol.swift
T
pkurchatov 0299f24418 Fixed ternary operator
commit_hash:d444b63f778a6c6d1c94f671ecf4b8a088d75b52
2024-12-26 17:59:52 +03:00

60 lines
1.2 KiB
Swift

import Foundation
import VGSL
extension CalcExpression {
enum Symbol: Hashable {
case variable(String)
case infix(String)
case prefix(String)
case ternary
case function(String)
case method(String)
var type: String {
switch self {
case .variable:
"variable"
case .infix, .prefix, .ternary:
"operator"
case .function:
"function"
case .method:
"method"
}
}
var name: String {
switch self {
case let .variable(name),
let .infix(name),
let .prefix(name),
let .function(name),
let .method(name):
name
case .ternary:
"?:"
}
}
func formatExpression(_ args: [Any]) -> String {
switch self {
case .prefix:
"\(name)\(formatArgForError(args[0]))"
case .infix, .ternary, .variable:
name
case .function:
formatFunction(args)
case .method:
formatFunction(Array(args.dropFirst()))
}
}
private func formatFunction(_ args: [Any]) -> String {
let argsString = args
.map { formatArgForError($0) }
.joined(separator: ", ")
return "\(name)(\(argsString))"
}
}
}