|
| 1 | +### ZY 语言插件开发/修改指南 |
| 2 | + |
| 3 | +#### 技术栈与约束 |
| 4 | + |
| 5 | +- **语言**: Java(禁止 Kotlin、外部 LSP) |
| 6 | +- **平台**: IntelliJ Platform SDK(优先使用本地 IDEA 路径) |
| 7 | +- **注释**: 所有类/方法/复杂逻辑/重要变量必须中文注释 |
| 8 | +- **实现**: 禁止占位、临时跳过;功能需完整实现 |
| 9 | + |
| 10 | +#### 项目结构 |
| 11 | + |
| 12 | +- `src/main/java/com/company/plugin/` |
| 13 | + - `language/`: `ZyLanguage`、`ZyFileType`、`ZyParserDefinition` |
| 14 | + - `highlighting/`: `ZyLexer`、`ZySyntaxHighlighter`、`ZySyntaxHighlighterFactory`、`ZyTokenTypes` |
| 15 | + - `navigation/`: 跳转与引用 |
| 16 | + - `completion/`: 补全 |
| 17 | +- `src/main/resources/META-INF/plugin.xml`: 扩展点注册 |
| 18 | +- `build.gradle.kts`: 构建配置 |
| 19 | + |
| 20 | +#### 构建与运行 |
| 21 | + |
| 22 | +- 构建: `./gradlew build --offline` |
| 23 | +- 清理: `./gradlew clean` |
| 24 | +- 沙箱运行: `./gradlew runIde` |
| 25 | +- 缓存保护: 不删除全局 Gradle/Maven/IDEA 缓存;仅清理项目 `build/`、`out/` |
| 26 | + |
| 27 | +#### 语法高亮与词法分析 |
| 28 | + |
| 29 | +- 入口组件: |
| 30 | + - 词法分析:`highlighting/ZyLexer` |
| 31 | + - Token 类型:`highlighting/ZyTokenTypes` |
| 32 | + - 高亮器:`highlighting/ZySyntaxHighlighter` |
| 33 | + - 颜色键:`highlighting/ZySyntaxHighlighterFactory` |
| 34 | +- 关键字维护: |
| 35 | + - 在 `ZyLexer` 的 `ZY_KEYWORDS` 中增删(已包含 `struct`) |
| 36 | + - `getTokenTypeForText` 返回 `ZyTokenTypes.KEYWORD` → `ZySyntaxHighlighter` 映射至 `KEYWORD` 颜色 |
| 37 | +- 新语法元素流程: |
| 38 | + 1. 在 `ZyLexer.advance()` 识别并返回新的 `ZyTokenTypes` 类型 |
| 39 | + 2. 在 `ZyTokenTypes` 定义 `IElementType` |
| 40 | + 3. 在 `ZySyntaxHighlighter.getTokenHighlights` 做颜色映射 |
| 41 | + 4. 在 `ZySyntaxHighlighterFactory` 定义默认 `TextAttributesKey` |
| 42 | +- 注意点: |
| 43 | + - 字符串转义与闭合、注释块闭合、变量标识(如 `$`)要完整处理 |
| 44 | + - 空白应作为独立 token,保持 token 流连续 |
| 45 | + |
| 46 | +#### 代码补全与导航 |
| 47 | + |
| 48 | +- 补全:`completion/ZyCompletionContributor` |
| 49 | + - 基于上下文/索引提供候选,保证非阻塞;正确处理 `ProcessCanceledException` |
| 50 | +- 跳转:`navigation/ZySimpleGotoDeclarationHandler` |
| 51 | +- 引用:`navigation/ZySimpleReferenceContributor` |
| 52 | +- 索引/作用域:`index/ZyScopeBasedParser` 可用于构建符号表,支持跨文件 |
| 53 | + |
| 54 | +#### plugin.xml 配置 |
| 55 | + |
| 56 | +- 注册:`fileType`、`syntaxHighlighterFactory`、`completion`、`gotoDeclarationHandler`、`referenceContributor` 等扩展点 |
| 57 | +- 确保 `.zy` 文件类型关联与图标配置 |
| 58 | + |
| 59 | +#### 性能与稳定性 |
| 60 | + |
| 61 | +- 性能: |
| 62 | + - 词法/高亮单次扫描,编辑区增量触发 |
| 63 | + - 对索引/作用域解析结果做缓存,变更时精准失效 |
| 64 | +- 错误处理: |
| 65 | + - 捕获并传播 `ProcessCanceledException`,避免吞异常 |
| 66 | + - 提供清晰日志与用户提示,不阻塞 UI 线程 |
| 67 | + |
| 68 | +#### 测试建议 |
| 69 | + |
| 70 | +- 单元测试: |
| 71 | + - 词法切分、高亮映射 |
| 72 | + - 补全过滤/排序 |
| 73 | + - 跳转/引用解析 |
| 74 | +- 集成测试: |
| 75 | + - 打开 `.zy` 文件全链路(高亮、补全、跳转) |
| 76 | +- 查看报告:`build/reports/tests` |
| 77 | + |
| 78 | +#### 典型改动清单 |
| 79 | + |
| 80 | +- 新增保留字: |
| 81 | + 1. `ZyLexer.ZY_KEYWORDS.add("keyword")` |
| 82 | + 2. 如需差异化配色:扩展 `ZyTokenTypes` 与颜色键 |
| 83 | +- 扩展补全: |
| 84 | + 1. 在 `ZyCompletionContributor` 注入 `CompletionProvider` |
| 85 | + 2. 从索引/作用域读取符号,排序与去重 |
| 86 | + |
| 87 | +#### 构建配置要点 |
| 88 | + |
| 89 | +- 使用 Java 插件与固定 IntelliJ 平台版本 |
| 90 | +- 配置本地 IDEA 路径、国内镜像与离线/缓存(见 `gradle.properties`) |
| 91 | + |
| 92 | +#### 发布与验证 |
| 93 | + |
| 94 | +- 打包: `./gradlew build` 产出 `build/distributions/*.zip` |
| 95 | +- 本地安装: IDE 安装 zip 或 `runIde` 沙箱验证 |
| 96 | +- 版本规范: 语义化版本,更新 `plugin.xml` 的兼容范围 |
0 commit comments