Skip to content

Commit 3a79177

Browse files
authored
Merge pull request #32 from qianmoQ/dev-25.0.2
feat (language): 支持 Swift 语言
2 parents 9fa5aa8 + 039916f commit 3a79177

15 files changed

Lines changed: 86 additions & 14 deletions

File tree

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发
2222

2323
## 支持的语言
2424

25-
- **Python 2**
26-
- **Python 3**
27-
- **Node.js**
2825
- **Go**
2926
- **Java**
30-
- **Shell**
27+
- **Node.js**
28+
- **Python 2**
29+
- **Python 3**
3130
- **Rust**
31+
- **Shell**
32+
- **Swift**
3233
- **...更多语言敬请期待**
3334

3435
## 安装

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "codeforge",
33
"private": true,
4-
"version": "25.0.1",
4+
"version": "25.0.2",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

public/icons/swift.svg

Lines changed: 4 additions & 0 deletions
Loading

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "CodeForge"
3-
version = "25.0.1"
3+
version = "25.0.2"
44
description = "CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发者、学生和编程爱好者设计。"
55
authors = ["devlive-community"]
66
edition = "2024"

src-tauri/src/plugins/go.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl LanguagePlugin for GoPlugin {
3434
run_command: Some(String::from("go run $filename")),
3535
after_compile: None,
3636
template: Some(String::from(
37-
"package main\n\nimport \"fmt\"\n\nfunc main() {\n\t// Your code here\n\tfmt.Println(\"Hello, Go!\")\n}\n",
37+
"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}",
3838
)),
3939
timeout: Some(30),
4040
}

src-tauri/src/plugins/java.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl LanguagePlugin for JavaPlugin {
4040
run_command: Some(String::from("java $filename")),
4141
after_compile: Some(String::from("rm -f *.class")),
4242
template: Some(String::from(
43-
"public class Main {\n public static void main(String[] args) {\n System.out.println(\"Hello, World!\");\n }\n}",
43+
"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}",
4444
)),
4545
timeout: Some(30),
4646
}

src-tauri/src/plugins/manager.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use super::{
55
use crate::plugins::java::JavaPlugin;
66
use crate::plugins::rust::RustPlugin;
77
use crate::plugins::shell::ShellPlugin;
8+
use crate::plugins::swift::SwiftPlugin;
89
use std::collections::HashMap;
910

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

2628
Self { plugins }
2729
}
@@ -32,7 +34,7 @@ impl PluginManager {
3234

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

3739
plugins
3840
.into_iter()

src-tauri/src/plugins/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ pub struct PluginConfig {
4646
// 语言插件接口
4747
pub trait LanguagePlugin: Send + Sync {
4848
// 获取插件优先级
49+
#[allow(dead_code)]
4950
fn get_order(&self) -> i32 {
5051
0
5152
}
@@ -337,5 +338,6 @@ pub mod python2;
337338
pub mod python3;
338339
pub mod rust;
339340
pub mod shell;
341+
pub mod swift;
340342

341343
pub use manager::PluginManager;

src-tauri/src/plugins/nodejs.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ impl LanguagePlugin for NodeJSPlugin {
3838
execute_home: None,
3939
run_command: Option::from(String::from("node $filename")),
4040
after_compile: None,
41-
template: None,
41+
template: Some(String::from(
42+
"// 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});",
43+
)),
4244
timeout: Some(30),
4345
}
4446
}

0 commit comments

Comments
 (0)