diff --git a/README.md b/README.md index bb9786a..304e4ae 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,14 @@ CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发 ## 支持的语言 -- **Python 2** -- **Python 3** -- **Node.js** - **Go** - **Java** -- **Shell** +- **Node.js** +- **Python 2** +- **Python 3** - **Rust** +- **Shell** +- **Swift** - **...更多语言敬请期待** ## 安装 diff --git a/package.json b/package.json index a8d36e1..6695b25 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "codeforge", "private": true, - "version": "25.0.1", + "version": "25.0.2", "type": "module", "scripts": { "dev": "vite", diff --git a/public/icons/swift.svg b/public/icons/swift.svg new file mode 100644 index 0000000..7440bbe --- /dev/null +++ b/public/icons/swift.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 86e9f85..3705b25 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "CodeForge" -version = "25.0.1" +version = "25.0.2" dependencies = [ "chrono", "dirs", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index b268c27..32423db 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "CodeForge" -version = "25.0.1" +version = "25.0.2" description = "CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发者、学生和编程爱好者设计。" authors = ["devlive-community"] edition = "2024" diff --git a/src-tauri/src/plugins/go.rs b/src-tauri/src/plugins/go.rs index 36d51e0..3797f6c 100644 --- a/src-tauri/src/plugins/go.rs +++ b/src-tauri/src/plugins/go.rs @@ -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), } diff --git a/src-tauri/src/plugins/java.rs b/src-tauri/src/plugins/java.rs index 5e12496..b54cc6c 100644 --- a/src-tauri/src/plugins/java.rs +++ b/src-tauri/src/plugins/java.rs @@ -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 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), } diff --git a/src-tauri/src/plugins/manager.rs b/src-tauri/src/plugins/manager.rs index 34a0a86..bf47aec 100644 --- a/src-tauri/src/plugins/manager.rs +++ b/src-tauri/src/plugins/manager.rs @@ -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 { @@ -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 } } @@ -32,7 +34,7 @@ impl PluginManager { pub fn get_supported_languages(&self) -> Vec { 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() diff --git a/src-tauri/src/plugins/mod.rs b/src-tauri/src/plugins/mod.rs index 9e3b851..644ecbf 100644 --- a/src-tauri/src/plugins/mod.rs +++ b/src-tauri/src/plugins/mod.rs @@ -46,6 +46,7 @@ pub struct PluginConfig { // 语言插件接口 pub trait LanguagePlugin: Send + Sync { // 获取插件优先级 + #[allow(dead_code)] fn get_order(&self) -> i32 { 0 } @@ -337,5 +338,6 @@ pub mod python2; pub mod python3; pub mod rust; pub mod shell; +pub mod swift; pub use manager::PluginManager; diff --git a/src-tauri/src/plugins/nodejs.rs b/src-tauri/src/plugins/nodejs.rs index 26303ff..bec22c7 100644 --- a/src-tauri/src/plugins/nodejs.rs +++ b/src-tauri/src/plugins/nodejs.rs @@ -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), } } diff --git a/src-tauri/src/plugins/python2.rs b/src-tauri/src/plugins/python2.rs index 8be3214..196fa9c 100644 --- a/src-tauri/src/plugins/python2.rs +++ b/src-tauri/src/plugins/python2.rs @@ -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), } } diff --git a/src-tauri/src/plugins/python3.rs b/src-tauri/src/plugins/python3.rs index e1cc200..6f3650b 100644 --- a/src-tauri/src/plugins/python3.rs +++ b/src-tauri/src/plugins/python3.rs @@ -38,7 +38,9 @@ impl LanguagePlugin for Python3Plugin { execute_home: None, run_command: Option::from(String::from("python3 $filename")), after_compile: None, - template: None, + template: Some(String::from( + "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n# Python3 示例代码 - CodeForge 代码执行环境\n\nprint(\"🎉 欢迎使用 CodeForge!\")\nprint(\"Welcome to CodeForge!\")\nprint(\"\")\n\nprint(\"=========================================\")\nprint(\" CodeForge Python3 \")\nprint(\"=========================================\")\nprint(\"\")\n\n# 基本输出示例\nprint(\"✅ Python3 运行成功! (Python3 is working!)\")\nprint(\"🐍 这是 Python3 程序 (This is Python3 program)\")\nprint(\"\")\n\n# 变量操作\nname = \"CodeForge\"\nversion = \"Python3\"\nnumber1 = 10\nnumber2 = 20\nresult = number1 + number2\n\nprint(\"🔢 简单计算 (Simple calculation):\")\nprint(f\"{number1} + {number2} = {result}\")\nprint(\"\")\n\n# 字符串操作\nprint(\"📝 字符串操作 (String operations):\")\nprint(f\"平台名称 (Platform): {name}\")\nprint(f\"语言版本 (Language): {version}\")\nprint(f\"完整信息 (Full info): {name} - {version}\")\nprint(\"\")\n\n# 循环示例\nprint(\"🔄 循环输出 (Loop output):\")\nfor i in range(1, 6):\n print(f\"第 {i} 次输出 (Output #{i}): Hello from CodeForge!\")\nprint(\"\")\n\n# 列表操作\nfruits = [\"苹果\", \"香蕉\", \"橙子\", \"葡萄\"]\nprint(\"🍎 水果列表 (Fruit list):\")\nfor i, fruit in enumerate(fruits, 1):\n print(f\"{i}. {fruit}\")\nprint(\"\")\n\n# 条件判断\nscore = 85\nprint(\"📊 成绩评估 (Score evaluation):\")\nif score >= 90:\n print(\"优秀! (Excellent!)\")\nelif score >= 80:\n print(\"良好! (Good!)\")\nelif score >= 60:\n print(\"及格 (Pass)\")\nelse:\n print(\"需要努力 (Need improvement)\")\n\n# 字典操作示例\nuser = {\n \"name\": \"CodeForge用户\",\n \"age\": 25,\n \"skills\": [\"Python\", \"JavaScript\", \"Java\"],\n \"is_active\": True\n}\n\nprint(\"\")\nprint(\"📦 字典操作 (Dictionary operations):\")\nprint(f\"用户名: {user['name']}\")\nprint(f\"年龄: {user['age']}\")\nprint(f\"技能: {', '.join(user['skills'])}\")\nprint(f\"活跃状态: {'是' if user['is_active'] else '否'}\")\n\n# 函数示例\ndef greet_user(name: str) -> str:\n \"\"\"问候用户的函数\"\"\"\n return f\"Hello, {name}! 👋\"\n\n# Lambda函数示例\nsquare = lambda x: x ** 2\n\n# 列表推导式示例\nnumbers = [1, 2, 3, 4, 5]\nsquares = [x ** 2 for x in numbers]\neven_squares = [x ** 2 for x in numbers if x % 2 == 0]\n\nprint(\"\")\nprint(\"🎭 函数和推导式示例 (Function and comprehension examples):\")\ngreeting = greet_user(\"CodeForge用户\")\nprint(greeting)\nprint(f\"数字: {numbers}\")\nprint(f\"平方: {squares}\")\nprint(f\"偶数的平方: {even_squares}\")\nprint(f\"5的平方 (使用lambda): {square(5)}\")\n\n# 类示例(使用现代Python特性)\nclass Calculator:\n \"\"\"简单的计算器类\"\"\"\n \n def __init__(self, name: str = \"CodeForge计算器\"):\n self.name = name\n self.history = []\n \n def add(self, a: float, b: float) -> float:\n result = a + b\n self.history.append(f\"{a} + {b} = {result}\")\n return result\n \n def multiply(self, a: float, b: float) -> float:\n result = a * b\n self.history.append(f\"{a} × {b} = {result}\")\n return result\n \n def get_history(self) -> list:\n return self.history\n\nprint(\"\")\nprint(\"🧮 类示例 (Class example):\")\ncalc = Calculator()\nprint(f\"计算器名称: {calc.name}\")\nresult1 = calc.add(3.5, 7.2)\nresult2 = calc.multiply(4, 6)\nprint(f\"3.5 + 7.2 = {result1}\")\nprint(f\"4 × 6 = {result2}\")\nprint(f\"计算历史: {calc.get_history()}\")\n\n# 异常处理示例\nprint(\"\")\nprint(\"⚠️ 异常处理示例 (Exception handling example):\")\ntry:\n division_result = 10 / 2\n print(f\"10 ÷ 2 = {division_result}\")\n # 模拟一个可能的错误\n risky_operation = 10 / 0 # 这会引发异常\nexcept ZeroDivisionError as e:\n print(f\"捕获到除零错误: {e}\")\nexcept Exception as e:\n print(f\"捕获到其他错误: {e}\")\nelse:\n print(\"没有发生异常\")\nfinally:\n print(\"异常处理完成\")\n\nprint(\"\")\nprint(\"🎯 CodeForge Python3 代码执行完成!\")\nprint(\"🎯 CodeForge Python3 execution completed!\")\nprint(\"\")\nprint(\"感谢使用 CodeForge 代码执行环境! 🚀\")\nprint(\"Thank you for using CodeForge! 🚀\")", + )), timeout: Some(30), } } diff --git a/src-tauri/src/plugins/swift.rs b/src-tauri/src/plugins/swift.rs new file mode 100644 index 0000000..2a68239 --- /dev/null +++ b/src-tauri/src/plugins/swift.rs @@ -0,0 +1,54 @@ +use super::{LanguagePlugin, PluginConfig}; +use std::vec; + +pub struct SwiftPlugin; + +impl LanguagePlugin for SwiftPlugin { + fn get_order(&self) -> i32 { + 8 + } + + fn get_language_name(&self) -> &'static str { + "Swift" + } + + fn get_language_key(&self) -> &'static str { + "swift" + } + + fn get_file_extension(&self) -> String { + self.get_config() + .map(|config| config.extension.clone()) + .unwrap_or_else(|| "swift".to_string()) + } + + fn get_version_args(&self) -> Vec<&'static str> { + vec!["--version"] + } + + fn get_path_command(&self) -> String { + "which swift".to_string() + } + + fn get_default_config(&self) -> PluginConfig { + PluginConfig { + enabled: true, + language: String::from("swift"), + before_compile: None, + extension: String::from("swift"), + execute_home: None, + run_command: Some(String::from("swift $filename")), + after_compile: None, + template: Some(String::from( + "import Foundation\n// Swift 示例代码 - CodeForge 代码执行环境\n\nprint(\"🎉 欢迎使用 CodeForge!\")\nprint(\"Welcome to CodeForge!\")\nprint(\"\")\n\nprint(\"=========================================\")\nprint(\" CodeForge Swift \")\nprint(\"=========================================\")\nprint(\"\")\n\n// 基本输出示例\nprint(\"✅ Swift 运行成功! (Swift is working!)\")\nprint(\"🦉 这是 Swift 脚本 (This is Swift script)\")\nprint(\"\")\n\n// 变量操作\nlet name = \"CodeForge\"\nlet version = \"Swift\"\nlet number1 = 10\nlet number2 = 20\nlet result = number1 + number2\n\nprint(\"🔢 简单计算 (Simple calculation):\")\nprint(\"\\(number1) + \\(number2) = \\(result)\")\nprint(\"\")\n\n// 字符串操作\nprint(\"📝 字符串操作 (String operations):\")\nprint(\"平台名称 (Platform): \\(name)\")\nprint(\"语言版本 (Language): \\(version)\")\nprint(\"完整信息 (Full info): \\(name) - \\(version)\")\nprint(\"\")\n\n// 循环示例\nprint(\"🔄 循环输出 (Loop output):\")\nfor i in 1...5 {\n print(\"第 \\(i) 次输出 (Output #\\(i)): Hello from CodeForge!\")\n}\nprint(\"\")\n\n// 数组操作\nlet fruits = [\"苹果\", \"香蕉\", \"橙子\", \"葡萄\"]\nprint(\"🍎 水果列表 (Fruit list):\")\nfor (index, fruit) in fruits.enumerated() {\n print(\"\\(index + 1). \\(fruit)\")\n}\nprint(\"\")\n\n// 条件判断\nlet score = 85\nprint(\"📊 成绩评估 (Score evaluation):\")\nif score >= 90 {\n print(\"优秀! (Excellent!)\")\n} else if score >= 80 {\n print(\"良好! (Good!)\")\n} else if score >= 60 {\n print(\"及格 (Pass)\")\n} else {\n print(\"需要努力 (Need improvement)\")\n}\n\n// 可选类型示例\nvar optionalValue: Int? = 42\nprint(\"\")\nprint(\"🔍 可选类型示例 (Optional example):\")\nif let unwrappedValue = optionalValue {\n print(\"可选值: \\(unwrappedValue) (Optional value: \\(unwrappedValue))\")\n} else {\n print(\"值为空 (Value is nil)\")\n}\n\n// 函数示例\nfunc greetUser(name: String) -> String {\n return \"Hello, \\(name)! 👋\"\n}\n\nprint(\"\")\nprint(\"🎭 函数示例 (Function example):\")\nlet greeting = greetUser(name: \"CodeForge用户\")\nprint(greeting)\n\nprint(\"\")\nprint(\"🎯 CodeForge Swift 代码执行完成!\")\nprint(\"🎯 CodeForge Swift execution completed!\")\nprint(\"\")\nprint(\"感谢使用 CodeForge 代码执行环境! 🚀\")\nprint(\"Thank you for using CodeForge! 🚀\")", + )), + timeout: Some(30), + } + } + + fn get_default_command(&self) -> String { + self.get_config() + .and_then(|config| config.run_command.clone()) + .unwrap_or_else(|| "swift".to_string()) + } +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index ee9eaac..e3c09b6 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "CodeForge", - "version": "25.0.1", + "version": "25.0.2", "identifier": "org.devlive.codeforge", "build": { "beforeDevCommand": "pnpm dev", diff --git a/src/composables/useCodeMirrorEditor.ts b/src/composables/useCodeMirrorEditor.ts index 5d7f845..6dd6f5b 100644 --- a/src/composables/useCodeMirrorEditor.ts +++ b/src/composables/useCodeMirrorEditor.ts @@ -5,6 +5,7 @@ import { go } from '@codemirror/lang-go' import { java } from '@codemirror/lang-java' import { rust } from '@codemirror/lang-rust' import { shell } from '@codemirror/legacy-modes/mode/shell' +import { swift } from '@codemirror/legacy-modes/mode/swift' import { abcdef, abyss, @@ -160,6 +161,8 @@ export function useCodeMirrorEditor(props: Props) return rust() case 'shell': return StreamLanguage.define(shell) + case 'swift': + return StreamLanguage.define(swift) default: return null }