diff --git a/api/types/languages/languages.go b/api/types/languages/languages.go index ae87e7d..1e22adf 100644 --- a/api/types/languages/languages.go +++ b/api/types/languages/languages.go @@ -7,26 +7,23 @@ type ProgrammingLanguage string func (p *ProgrammingLanguage) CodeCommand(sourceCode string) []string { switch *p { case Python: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.py && python /tmp/code.py", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("python <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} case Ruby: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.rb && ruby /tmp/code.rb", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("ruby <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} case Javascript: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.js && node /tmp/code.js", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("node <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} case Typescript: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.ts && bun /tmp/code.ts", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("bun <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} case Lua: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.lua && lua /tmp/code.lua", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("lua <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} case Kotlin: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.kt && kotlinc /tmp/code.kt -include-runtime -d /tmp/code.jar && kotlin /tmp/code.jar", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("kotlinc <(cat << 'EOF'\n%s\nEOF\n) -include-runtime -d /tmp/code.jar && kotlin /tmp/code.jar", sourceCode)} case Julia: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.jl && julia /tmp/code.jl", sourceCode)} - // figure out a way run zig source code - // case Zig: - // return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.zig && zig build run /tmp/code.zig", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("julia <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} case Rust: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/rust_code.rs && rustc --out-dir=/tmp /tmp/rust_code.rs && /tmp/rust_code", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("rustc -o /tmp/code <(cat << 'EOF'\n%s\nEOF\n) && /tmp/code", sourceCode)} case Golang: - return []string{"/bin/sh", "-c", fmt.Sprintf("printf '%%s\n' \"%s\" > /tmp/code.go && go run /tmp/code.go", sourceCode)} + return []string{"/bin/sh", "-c", fmt.Sprintf("go run <(cat << 'EOF'\n%s\nEOF\n)", sourceCode)} default: return nil }