Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发

## 支持的语言

- **Python 2**
- **Python 3**
- **Node.js**
- **Go**
- **Java**
- **Shell**
- **Node.js**
- **Python 2**
- **Python 3**
- **Rust**
- **Shell**
- **Swift**
- **...更多语言敬请期待**

## 安装
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "codeforge",
"private": true,
"version": "25.0.1",
"version": "25.0.2",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
4 changes: 4 additions & 0 deletions public/icons/swift.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "CodeForge"
version = "25.0.1"
version = "25.0.2"
description = "CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发者、学生和编程爱好者设计。"
authors = ["devlive-community"]
edition = "2024"
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/src/plugins/go.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ impl LanguagePlugin for GoPlugin {
run_command: Some(String::from("go run $filename")),
after_compile: None,
template: Some(String::from(
"package main\n\nimport \"fmt\"\n\nfunc main() {\n\t// Your code here\n\tfmt.Println(\"Hello, Go!\")\n}\n",
"package main\n\nimport (\n\t\"fmt\"\n)\n\n// Go 示例代码 - CodeForge 代码执行环境\n\nfunc main() {\n\tfmt.Println(\"🎉 欢迎使用 CodeForge!\")\n\tfmt.Println(\"Welcome to CodeForge!\")\n\tfmt.Println(\"\")\n\n\tfmt.Println(\"=========================================\")\n\tfmt.Println(\" CodeForge Go \")\n\tfmt.Println(\"=========================================\")\n\tfmt.Println(\"\")\n\n\t// 基本输出示例\n\tfmt.Println(\"✅ Go 运行成功! (Go is working!)\")\n\tfmt.Println(\"🐹 这是 Go 程序 (This is Go program)\")\n\tfmt.Println(\"\")\n\n\t// 变量操作\n\tname := \"CodeForge\"\n\tversion := \"Go\"\n\tnumber1 := 10\n\tnumber2 := 20\n\tresult := number1 + number2\n\n\tfmt.Println(\"🔢 简单计算 (Simple calculation):\")\n\tfmt.Printf(\"%d + %d = %d\\n\", number1, number2, result)\n\tfmt.Println(\"\")\n\n\t// 字符串操作\n\tfmt.Println(\"📝 字符串操作 (String operations):\")\n\tfmt.Printf(\"平台名称 (Platform): %s\\n\", name)\n\tfmt.Printf(\"语言版本 (Language): %s\\n\", version)\n\tfmt.Printf(\"完整信息 (Full info): %s - %s\\n\", name, version)\n\tfmt.Println(\"\")\n\n\t// 循环示例\n\tfmt.Println(\"🔄 循环输出 (Loop output):\")\n\tfor i := 1; i <= 5; i++ {\n\t\tfmt.Printf(\"第 %d 次输出 (Output #%d): Hello from CodeForge!\\n\", i, i)\n\t}\n\tfmt.Println(\"\")\n\n\t// 切片操作\n\tfruits := []string{\"苹果\", \"香蕉\", \"橙子\", \"葡萄\"}\n\tfmt.Println(\"🍎 水果列表 (Fruit list):\")\n\tfor i, fruit := range fruits {\n\t\tfmt.Printf(\"%d. %s\\n\", i+1, fruit)\n\t}\n\tfmt.Println(\"\")\n\n\t// 条件判断\n\tscore := 85\n\tfmt.Println(\"📊 成绩评估 (Score evaluation):\")\n\tif score >= 90 {\n\t\tfmt.Println(\"优秀! (Excellent!)\")\n\t} else if score >= 80 {\n\t\tfmt.Println(\"良好! (Good!)\")\n\t} else if score >= 60 {\n\t\tfmt.Println(\"及格 (Pass)\")\n\t} else {\n\t\tfmt.Println(\"需要努力 (Need improvement)\")\n\t}\n\n\t// 指针示例\n\tvalue := 42\n\tptr := &value\n\tfmt.Println(\"\")\n\tfmt.Println(\"🔍 指针示例 (Pointer example):\")\n\tfmt.Printf(\"值: %d, 地址: %p (Value: %d, Address: %p)\\n\", *ptr, ptr, *ptr, ptr)\n\n\t// 函数示例\n\tgreeting := greetUser(\"CodeForge用户\")\n\tfmt.Println(\"\")\n\tfmt.Println(\"🎭 函数示例 (Function example):\")\n\tfmt.Println(greeting)\n\n\tfmt.Println(\"\")\n\tfmt.Println(\"🎯 CodeForge Go 代码执行完成!\")\n\tfmt.Println(\"🎯 CodeForge Go execution completed!\")\n\tfmt.Println(\"\")\n\tfmt.Println(\"感谢使用 CodeForge 代码执行环境! 🚀\")\n\tfmt.Println(\"Thank you for using CodeForge! 🚀\")\n}\n\nfunc greetUser(name string) string {\n\treturn fmt.Sprintf(\"Hello, %s! 👋\", name)\n}",
)),
timeout: Some(30),
}
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/src/plugins/java.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ impl LanguagePlugin for JavaPlugin {
run_command: Some(String::from("java $filename")),
after_compile: Some(String::from("rm -f *.class")),
template: Some(String::from(
"public class Main {\n public static void main(String[] args) {\n System.out.println(\"Hello, World!\");\n }\n}",
"import java.util.*;\n\n// Java 示例代码 - CodeForge 代码执行环境\n\npublic class Main {\n public static void main(String[] args) {\n System.out.println(\"🎉 欢迎使用 CodeForge!\");\n System.out.println(\"Welcome to CodeForge!\");\n System.out.println(\"\");\n\n System.out.println(\"=========================================\");\n System.out.println(\" CodeForge Java \");\n System.out.println(\"=========================================\");\n System.out.println(\"\");\n\n // 基本输出示例\n System.out.println(\"✅ Java 运行成功! (Java is working!)\");\n System.out.println(\"☕ 这是 Java 程序 (This is Java program)\");\n System.out.println(\"\");\n\n // 变量操作\n String name = \"CodeForge\";\n String version = \"Java\";\n int number1 = 10;\n int number2 = 20;\n int result = number1 + number2;\n\n System.out.println(\"🔢 简单计算 (Simple calculation):\");\n System.out.printf(\"%d + %d = %d%n\", number1, number2, result);\n System.out.println(\"\");\n\n // 字符串操作\n System.out.println(\"📝 字符串操作 (String operations):\");\n System.out.println(\"平台名称 (Platform): \" + name);\n System.out.println(\"语言版本 (Language): \" + version);\n System.out.println(\"完整信息 (Full info): \" + name + \" - \" + version);\n System.out.println(\"\");\n\n // 循环示例\n System.out.println(\"🔄 循环输出 (Loop output):\");\n for (int i = 1; i <= 5; i++) {\n System.out.printf(\"第 %d 次输出 (Output #%d): Hello from CodeForge!%n\", i, i);\n }\n System.out.println(\"\");\n\n // 数组操作\n String[] fruits = {\"苹果\", \"香蕉\", \"橙子\", \"葡萄\"};\n System.out.println(\"🍎 水果列表 (Fruit list):\");\n for (int i = 0; i < fruits.length; i++) {\n System.out.printf(\"%d. %s%n\", i + 1, fruits[i]);\n }\n System.out.println(\"\");\n\n // 条件判断\n int score = 85;\n System.out.println(\"📊 成绩评估 (Score evaluation):\");\n if (score >= 90) {\n System.out.println(\"优秀! (Excellent!)\");\n } else if (score >= 80) {\n System.out.println(\"良好! (Good!)\");\n } else if (score >= 60) {\n System.out.println(\"及格 (Pass)\");\n } else {\n System.out.println(\"需要努力 (Need improvement)\");\n }\n\n // 集合操作示例\n List<String> languages = new ArrayList<>();\n languages.add(\"Java\");\n languages.add(\"Python\");\n languages.add(\"JavaScript\");\n languages.add(\"Go\");\n\n System.out.println(\"\");\n System.out.println(\"📋 编程语言列表 (Programming languages):\");\n for (int i = 0; i < languages.size(); i++) {\n System.out.printf(\"%d. %s%n\", i + 1, languages.get(i));\n }\n\n // 方法调用示例\n String greeting = greetUser(\"CodeForge用户\");\n System.out.println(\"\");\n System.out.println(\"🎭 方法示例 (Method example):\");\n System.out.println(greeting);\n\n System.out.println(\"\");\n System.out.println(\"🎯 CodeForge Java 代码执行完成!\");\n System.out.println(\"🎯 CodeForge Java execution completed!\");\n System.out.println(\"\");\n System.out.println(\"感谢使用 CodeForge 代码执行环境! 🚀\");\n System.out.println(\"Thank you for using CodeForge! 🚀\");\n }\n\n public static String greetUser(String name) {\n return String.format(\"Hello, %s! 👋\", name);\n }\n}",
)),
timeout: Some(30),
}
Expand Down
4 changes: 3 additions & 1 deletion src-tauri/src/plugins/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use super::{
use crate::plugins::java::JavaPlugin;
use crate::plugins::rust::RustPlugin;
use crate::plugins::shell::ShellPlugin;
use crate::plugins::swift::SwiftPlugin;
use std::collections::HashMap;

pub struct PluginManager {
Expand All @@ -22,6 +23,7 @@ impl PluginManager {
plugins.insert("java".to_string(), Box::new(JavaPlugin));
plugins.insert("shell".to_string(), Box::new(ShellPlugin));
plugins.insert("rust".to_string(), Box::new(RustPlugin));
plugins.insert("swift".to_string(), Box::new(SwiftPlugin));

Self { plugins }
}
Expand All @@ -32,7 +34,7 @@ impl PluginManager {

pub fn get_supported_languages(&self) -> Vec<serde_json::Value> {
let mut plugins: Vec<_> = self.plugins.iter().collect();
plugins.sort_by_key(|(_, plugin)| plugin.get_order());
plugins.sort_by_key(|(_, plugin)| plugin.get_language_key());

plugins
.into_iter()
Expand Down
2 changes: 2 additions & 0 deletions src-tauri/src/plugins/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ pub struct PluginConfig {
// 语言插件接口
pub trait LanguagePlugin: Send + Sync {
// 获取插件优先级
#[allow(dead_code)]
fn get_order(&self) -> i32 {
0
}
Expand Down Expand Up @@ -337,5 +338,6 @@ pub mod python2;
pub mod python3;
pub mod rust;
pub mod shell;
pub mod swift;

pub use manager::PluginManager;
4 changes: 3 additions & 1 deletion src-tauri/src/plugins/nodejs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ impl LanguagePlugin for NodeJSPlugin {
execute_home: None,
run_command: Option::from(String::from("node $filename")),
after_compile: None,
template: None,
template: Some(String::from(
"// Node.js 示例代码 - CodeForge 代码执行环境\n\nconsole.log(\"🎉 欢迎使用 CodeForge!\");\nconsole.log(\"Welcome to CodeForge!\");\nconsole.log(\"\");\n\nconsole.log(\"=========================================\");\nconsole.log(\" CodeForge Node.js \");\nconsole.log(\"=========================================\");\nconsole.log(\"\");\n\n// 基本输出示例\nconsole.log(\"✅ Node.js 运行成功! (Node.js is working!)\");\nconsole.log(\"🟢 这是 JavaScript 程序 (This is JavaScript program)\");\nconsole.log(\"\");\n\n// 变量操作\nconst name = \"CodeForge\";\nconst version = \"Node.js\";\nlet number1 = 10;\nlet number2 = 20;\nlet result = number1 + number2;\n\nconsole.log(\"🔢 简单计算 (Simple calculation):\");\nconsole.log(`${number1} + ${number2} = ${result}`);\nconsole.log(\"\");\n\n// 字符串操作\nconsole.log(\"📝 字符串操作 (String operations):\");\nconsole.log(`平台名称 (Platform): ${name}`);\nconsole.log(`语言版本 (Language): ${version}`);\nconsole.log(`完整信息 (Full info): ${name} - ${version}`);\nconsole.log(\"\");\n\n// 循环示例\nconsole.log(\"🔄 循环输出 (Loop output):\");\nfor (let i = 1; i <= 5; i++) {\n console.log(`第 ${i} 次输出 (Output #${i}): Hello from CodeForge!`);\n}\nconsole.log(\"\");\n\n// 数组操作\nconst fruits = [\"苹果\", \"香蕉\", \"橙子\", \"葡萄\"];\nconsole.log(\"🍎 水果列表 (Fruit list):\");\nfruits.forEach((fruit, index) => {\n console.log(`${index + 1}. ${fruit}`);\n});\nconsole.log(\"\");\n\n// 条件判断\nconst score = 85;\nconsole.log(\"📊 成绩评估 (Score evaluation):\");\nif (score >= 90) {\n console.log(\"优秀! (Excellent!)\");\n} else if (score >= 80) {\n console.log(\"良好! (Good!)\");\n} else if (score >= 60) {\n console.log(\"及格 (Pass)\");\n} else {\n console.log(\"需要努力 (Need improvement)\");\n}\n\n// 对象操作示例\nconst user = {\n name: \"CodeForge用户\",\n age: 25,\n skills: [\"JavaScript\", \"Node.js\", \"React\"]\n};\n\nconsole.log(\"\");\nconsole.log(\"📦 对象操作 (Object operations):\");\nconsole.log(`用户名: ${user.name}`);\nconsole.log(`年龄: ${user.age}`);\nconsole.log(`技能: ${user.skills.join(\", \")}`);\n\n// 函数示例\nfunction greetUser(name) {\n return `Hello, ${name}! 👋`;\n}\n\n// 箭头函数示例\nconst calculateSquare = (num) => num * num;\n\nconsole.log(\"\");\nconsole.log(\"🎭 函数示例 (Function examples):\");\nconst greeting = greetUser(\"CodeForge用户\");\nconsole.log(greeting);\nconsole.log(`5 的平方是: ${calculateSquare(5)}`);\n\n// Promise 示例\nconst delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));\n\nasync function asyncExample() {\n console.log(\"\");\n console.log(\"⏱️ 异步操作示例 (Async operation example):\");\n console.log(\"开始异步操作... (Starting async operation...)\");\n await delay(100);\n console.log(\"异步操作完成! (Async operation completed!)\");\n}\n\n// 执行异步示例\nasyncExample().then(() => {\n console.log(\"\");\n console.log(\"🎯 CodeForge Node.js 代码执行完成!\");\n console.log(\"🎯 CodeForge Node.js execution completed!\");\n console.log(\"\");\n console.log(\"感谢使用 CodeForge 代码执行环境! 🚀\");\n console.log(\"Thank you for using CodeForge! 🚀\");\n});",
)),
timeout: Some(30),
}
}
Expand Down
4 changes: 3 additions & 1 deletion src-tauri/src/plugins/python2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ impl LanguagePlugin for Python2Plugin {
execute_home: None,
run_command: Option::from(String::from("python2 $filename")),
after_compile: None,
template: None,
template: Some(String::from(
"# -*- coding: utf-8 -*-\n# Python2 示例代码 - CodeForge 代码执行环境\n\nprint u\"🎉 欢迎使用 CodeForge!\"\nprint u\"Welcome to CodeForge!\"\nprint u\"\"\n\nprint u\"=========================================\"\nprint u\" CodeForge Python2 \"\nprint u\"=========================================\"\nprint u\"\"\n\n# 基本输出示例\nprint u\"✅ Python2 运行成功! (Python2 is working!)\"\nprint u\"🐍 这是 Python2 程序 (This is Python2 program)\"\nprint u\"\"\n\n# 变量操作\nname = u\"CodeForge\"\nversion = u\"Python2\"\nnumber1 = 10\nnumber2 = 20\nresult = number1 + number2\n\nprint u\"🔢 简单计算 (Simple calculation):\"\nprint u\"{} + {} = {}\".format(number1, number2, result)\nprint u\"\"\n\n# 字符串操作\nprint u\"📝 字符串操作 (String operations):\"\nprint u\"平台名称 (Platform): {}\".format(name)\nprint u\"语言版本 (Language): {}\".format(version)\nprint u\"完整信息 (Full info): {} - {}\".format(name, version)\nprint u\"\"\n\n# 循环示例\nprint u\"🔄 循环输出 (Loop output):\"\nfor i in range(1, 6):\n print u\"第 {} 次输出 (Output #{}): Hello from CodeForge!\".format(i, i)\nprint u\"\"\n\n# 列表操作\nfruits = [u\"苹果\", u\"香蕉\", u\"橙子\", u\"葡萄\"]\nprint u\"🍎 水果列表 (Fruit list):\"\nfor i, fruit in enumerate(fruits):\n print u\"{}. {}\".format(i + 1, fruit)\nprint u\"\"\n\n# 条件判断\nscore = 85\nprint u\"📊 成绩评估 (Score evaluation):\"\nif score >= 90:\n print u\"优秀! (Excellent!)\"\nelif score >= 80:\n print u\"良好! (Good!)\"\nelif score >= 60:\n print u\"及格 (Pass)\"\nelse:\n print u\"需要努力 (Need improvement)\"\n\n# 字典操作示例\nuser = {\n u\"name\": u\"CodeForge用户\",\n u\"age\": 25,\n u\"skills\": [u\"Python\", u\"JavaScript\", u\"Java\"]\n}\n\nprint u\"\"\nprint u\"📦 字典操作 (Dictionary operations):\"\nprint u\"用户名: {}\".format(user[u\"name\"])\nprint u\"年龄: {}\".format(user[u\"age\"])\nprint u\"技能: {}\".format(u\", \".join(user[u\"skills\"]))\n\n# 函数示例\ndef greet_user(name):\n return u\"Hello, {}! 👋\".format(name)\n\n# 列表推导式示例\nnumbers = [1, 2, 3, 4, 5]\nsquares = [x * x for x in numbers]\n\nprint u\"\"\nprint u\"🎭 函数和列表推导示例 (Function and list comprehension examples):\"\ngreeting = greet_user(u\"CodeForge用户\")\nprint greeting\nprint u\"数字: {}\".format(numbers)\nprint u\"平方: {}\".format(squares)\n\n# 类示例\nclass Calculator(object):\n def __init__(self):\n self.name = u\"CodeForge计算器\"\n \n def add(self, a, b):\n return a + b\n \n def multiply(self, a, b):\n return a * b\n\nprint u\"\"\nprint u\"🧮 类示例 (Class example):\"\ncalc = Calculator()\nprint u\"计算器名称: {}\".format(calc.name)\nprint u\"3 + 7 = {}\".format(calc.add(3, 7))\nprint u\"4 × 6 = {}\".format(calc.multiply(4, 6))\n\nprint u\"\"\nprint u\"🎯 CodeForge Python2 代码执行完成!\"\nprint u\"🎯 CodeForge Python2 execution completed!\"\nprint u\"\"\nprint u\"感谢使用 CodeForge 代码执行环境! 🚀\"\nprint u\"Thank you for using CodeForge! 🚀\"",
)),
timeout: Some(30),
}
}
Expand Down
Loading
Loading