Skip to content

Commit 15e4da4

Browse files
committed
feat (language): 支持 Swift 语言
1 parent 16d1c01 commit 15e4da4

9 files changed

Lines changed: 68 additions & 4 deletions

File tree

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/manager.rs

Lines changed: 2 additions & 0 deletions
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
}

src-tauri/src/plugins/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,5 +337,6 @@ pub mod python2;
337337
pub mod python3;
338338
pub mod rust;
339339
pub mod shell;
340+
pub mod swift;
340341

341342
pub use manager::PluginManager;

src-tauri/src/plugins/swift.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use super::{LanguagePlugin, PluginConfig};
2+
use std::vec;
3+
4+
pub struct SwiftPlugin;
5+
6+
impl LanguagePlugin for SwiftPlugin {
7+
fn get_order(&self) -> i32 {
8+
8
9+
}
10+
11+
fn get_language_name(&self) -> &'static str {
12+
"Swift"
13+
}
14+
15+
fn get_language_key(&self) -> &'static str {
16+
"swift"
17+
}
18+
19+
fn get_file_extension(&self) -> String {
20+
self.get_config()
21+
.map(|config| config.extension.clone())
22+
.unwrap_or_else(|| "swift".to_string())
23+
}
24+
25+
fn get_version_args(&self) -> Vec<&'static str> {
26+
vec!["--version"]
27+
}
28+
29+
fn get_path_command(&self) -> String {
30+
"which swift".to_string()
31+
}
32+
33+
fn get_default_config(&self) -> PluginConfig {
34+
PluginConfig {
35+
enabled: true,
36+
language: String::from("swift"),
37+
before_compile: None,
38+
extension: String::from("swift"),
39+
execute_home: None,
40+
run_command: Some(String::from("swift $filename")),
41+
after_compile: None,
42+
template: Some(String::from(
43+
"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! 🚀\")",
44+
)),
45+
timeout: Some(30),
46+
}
47+
}
48+
49+
fn get_default_command(&self) -> String {
50+
self.get_config()
51+
.and_then(|config| config.run_command.clone())
52+
.unwrap_or_else(|| "swift".to_string())
53+
}
54+
}

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schema.tauri.app/config/2",
33
"productName": "CodeForge",
4-
"version": "25.0.1",
4+
"version": "25.0.2",
55
"identifier": "org.devlive.codeforge",
66
"build": {
77
"beforeDevCommand": "pnpm dev",

src/composables/useCodeMirrorEditor.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { go } from '@codemirror/lang-go'
55
import { java } from '@codemirror/lang-java'
66
import { rust } from '@codemirror/lang-rust'
77
import { shell } from '@codemirror/legacy-modes/mode/shell'
8+
import { swift } from '@codemirror/legacy-modes/mode/swift'
89
import {
910
abcdef,
1011
abyss,
@@ -160,6 +161,8 @@ export function useCodeMirrorEditor(props: Props)
160161
return rust()
161162
case 'shell':
162163
return StreamLanguage.define(shell)
164+
case 'swift':
165+
return StreamLanguage.define(swift)
163166
default:
164167
return null
165168
}

0 commit comments

Comments
 (0)