Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Idea Rust

基于 Rust + gpui(Zed 的 UI 框架)实现的轻量级 IntelliJ IDEA 风格 IDE。

开发方式

本项目由 DeepSeek(AI 编程助手)辅助开发,界面与交互大量参考 Zed 的实现 —— 包括文件树 Project Panel 的 扁平可见条目 + uniform_list 虚拟化渲染、编辑器与工具窗口布局、Zed 官方 SVG 图标资产等, UI 基于 gpui 直接构建。

功能

  • IDEA 风格界面:顶部菜单栏(File/Edit/View/Navigate/Code/Run/Tools/VCS/Window/Help,下拉浮层)、左侧工具窗口栏(圆角悬浮/选中样式)、Project 文件树、中部标签栏、底部状态栏
  • 文件树:懒加载目录扫描(忽略 .git/target/node_modules 等)、展开折叠、点击打开文件、活动文件高亮、键盘导航(方向键/回车/左右折叠展开)、选中条铺满面板
  • 多标签编辑器:切换 / 关闭(×)/ 未保存标记(●)、打开 / 保存 / 全部保存
  • 选区驱动编辑(参考 Zed 架构重构):SelectionSet 多光标/选区——Shift+方向键/Home/End 扩展选区、Cmd+A 全选、选区输入覆盖、Cmd+C/X/V 复制剪切粘贴、Cmd+Click 追加/移除光标、选区背景渲染;Cmd+Z/Cmd+Shift+Z 撤销重做(连续输入自动合并为一步,多选区编辑为一步事务);编辑后光标/选区经 anchor 偏移映射保持稳定;显示层与编辑层分离(display_map)
  • 终端工具窗口:通过 openpty 运行交互式 shell(Unix),支持方向键/快捷键转义序列、剪贴板粘贴、ANSI 输出剥离、闪烁光标、清空/重启;停止时按进程组终止
  • 运行 Java 项目(Run 面板):自动检测构建系统——pom.xmlmvn -q compile exec:javabuild.gradlegradle run、单个 .java 文件 → java <file>(源码模式)、无构建文件时扫描含 main 的类;stdout/stderr 实时输出、退出码显示、可停止/重跑
  • 语法高亮:Rust 与 Java 两套手写词法分析器,按文件扩展名自动分派(关键字、字符串、注释、数字、注解/属性、函数、类型名等,支持跨行块注释)
  • 完整文本输入:中文输入法(IME 组合/提交/下划线)、光标移动、滚轮滚动、光标闪烁、自动滚动到光标、剪贴板粘贴
  • 双主题:Darcula(深色)与 IntelliJ Light(浅色)一键切换,窗口尺寸自动适配小屏幕
  • 状态栏:git 分支、项目名、Ln, Col、语言、编码、缩进、主题名、操作消息

功能清单

✅ 已实现 🚧 待办
IDEA 风格界面(菜单栏 / 工具窗口栏 / 标签栏 / 状态栏) 查找与替换(Cmd+F / Cmd+R)
文件树:懒加载扫描、展开折叠、键盘导航、uniform_list 虚拟化渲染 文件树多选 / 拖拽、新建 / 重命名 / 删除文件
多标签编辑器:切换 / 关闭 / 未保存标记、打开 / 保存 / 全部保存 LSP 集成:代码补全、跳转定义、错误诊断
选区驱动编辑:多光标 / 选区扩展 / 复制剪切粘贴 / 撤销重做(anchor 语义) 文件系统变更监听(fs watcher),文件树自动刷新
语法高亮:Rust + Java 手写词法分析(含跨行块注释) 工程配置:项目 SDK、运行配置、依赖管理
完整文本输入:IME 中文输入、光标、滚动、闪烁、剪贴板粘贴 超大文件性能:整行渲染 → 按需渲染优化
终端工具窗口:PTY 交互式 shell、ANSI 剥离、闪烁光标、清空 / 重启 终端完整 ANSI 支持(颜色 / 光标定位)
Run 面板:自动检测 Maven / Gradle / 单文件 Java 并运行 分屏 / 多窗口编辑
双主题:Darcula / IntelliJ Light 一键切换 Git 集成面板:diff、提交、分支管理
状态栏:git 分支、Ln, Col、语言、编码、主题 调试器:断点、单步执行
打开 / 保存 / 全部保存

快捷键

快捷键 功能
Cmd+O 打开项目文件夹
Cmd+S / Cmd+Shift+S 保存 / 全部保存
Cmd+W 关闭当前标签
Cmd+R 运行当前项目(打开 Run 面板)
Cmd+A / Cmd+C / Cmd+X 全选 / 复制 / 剪切(编辑器内)
Cmd+Z / Cmd+Shift+Z 撤销 / 重做(编辑器内)
Shift+方向键 / Shift+Home / Shift+End 扩展选区
Cmd+Click 追加 / 移除光标(多光标)
Cmd+V 粘贴
Cmd+Q 退出
Esc 关闭下拉菜单 / 终端内写入转义键
方向键 / Home / End / PageUp / PageDown / Enter / Tab 编辑 / 文件树导航

构建与运行

需要 macOS(或其他 gpui 支持平台)+ Rust 1.85+;运行 Java 项目需本机安装 JDK(Java 11+ 支持单文件运行)。

cargo run

注意:gpui 默认在编译期用 metal 编译 shader;若本机缺少 Metal Toolchain, 本项目已启用 runtime_shaders feature(shader 运行时编译),无需额外安装。

测试

cargo test

覆盖:语法高亮 token、输出流解析(ANSI 剥离/CRLF)、运行计划构建(Maven/Gradle/单文件/扫描)、 布局回归(状态栏/文件树面板可见性、窗口尺寸适配)、图标资源渲染、文件树交互、 编辑器核心(选区/多光标编辑、撤销重做事务与输入合并、anchor 偏移映射、越界行号 clamp)。

项目结构

src/
├── main.rs            # 入口,创建窗口(尺寸适配屏幕)
├── app.rs             # 主视图:布局、菜单、工具窗口栏、标签、文件操作、状态栏
├── buffer.rs          # 文本缓冲:基于文档偏移的编辑 API、anchor 映射、撤销/重做事务
├── editor.rs          # 编辑器:选区驱动编辑、输入处理、选区/多光标渲染
├── selection.rs       # 选区集合:多光标、选区运算、编辑后偏移更新
├── display_map.rs     # 显示层:高亮 → TextRun → shape 的构建
├── file_tree.rs       # 文件树:懒加载扫描、展开折叠、uniform_list 虚拟化渲染
├── terminal.rs        # 终端工具窗口:PTY 交互式 shell
├── runner.rs          # Run 面板:构建系统检测、进程管理、输出显示
├── java_highlight.rs  # Java 词法高亮器
├── rust_highlight.rs  # Rust 词法高亮器
├── output.rs          # 公共输出流解析(终端与 Run 面板共用)
├── menus.rs           # 菜单栏数据
├── assets.rs          # 内嵌 SVG 图标资源(include_bytes!)
└── theme.rs           # Darcula / IntelliJ Light 主题

说明

  • 演示型 MVP:不做 LSP 集成、不做工程配置;编辑器为整行渲染, 超大文件(数万行)性能有限;撤销为编辑记录式(非快照),连续输入自动合并
  • 保存为同步写盘,适合小型文件
  • 终端与运行输出按行渲染并剥离 ANSI 转义(无颜色/光标定位),vim/top 等全屏程序可交互但显示不完整
  • 工具窗口栏与文件树图标采用 Zed 的 SVG 图标 (assets/icons/,Apache-2.0),通过 include_bytes! 内嵌,单色描边由主题着色

About

idea-rust

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages