Skip to content

Commit 6f50d64

Browse files
committed
修复跳转
1 parent fc9d215 commit 6f50d64

64 files changed

Lines changed: 5036 additions & 2452 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cursor/rules/code-completion.mdc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
---
2-
globs: *Completion*.kt,*CompletionContributor*.kt,*CompletionProvider*.kt
2+
globs: *Completion*.java,*CompletionContributor*.java,*CompletionProvider*.java
33
description: 代码提示和自动补全开发规范
44
---
55

66
# 代码提示开发规范
77

88
## 代码补全实现
99

10-
- 基于 LSP 的代码补全功能
10+
- 基于本地 Java 实现的代码补全功能
1111
- 实现自定义补全提供者
1212
- 支持智能提示和上下文感知
1313
- 提供补全项排序和过滤

.cursor/rules/code-navigation.mdc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
globs: *Navigation*.kt,*GoTo*.kt,*Reference*.kt,*Symbol*.kt
2+
globs: *Navigation*.java,*GoTo*.java,*Reference*.java,*Symbol*.java
33
description: 代码跳转和导航功能开发规范
44
---
55

@@ -20,11 +20,11 @@ description: 代码跳转和导航功能开发规范
2020
- 导入声明跳转
2121
- 重写方法跳转
2222

23-
## LSP 集成
23+
## 本地实现
2424

25-
- 使用 LSP 的跳转功能
26-
- 处理 LSP 跳转请求
27-
- 支持多文件跳转
25+
- 使用 IntelliJ Platform 的 PSI API
26+
- 实现自定义跳转处理器
27+
- 支持跨文件跳转
2828
- 提供跳转预览
2929

3030
## 性能优化
@@ -46,4 +46,4 @@ description: 代码跳转和导航功能开发规范
4646
- 处理跳转目标不存在
4747
- 提供跳转失败降级
4848
- 记录跳转性能指标
49-
- 优雅处理 LSP 错误
49+
- 优雅处理 PSI 错误

.cursor/rules/intellij-plugin-structure.mdc

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,24 @@ description: IntelliJ IDEA 插件项目结构和开发规范
77

88
## 项目概述
99

10-
开发一个支持 DIY 语言的 IntelliJ IDEA 插件,集成外部 LSP 服务器提供代码高亮、代码提示、代码跳转等功能。
10+
开发一个支持 DIY 语言的 IntelliJ IDEA 插件,使用本地 Java 实现提供代码高亮、代码提示、代码跳转等功能。
1111

1212
## 技术栈
1313

14-
- **开发语言**: Kotlin (优先) 或 Java
14+
- **开发语言**: Java (已从 Kotlin 重构)
1515
- **构建工具**: Gradle
1616
- **IntelliJ Platform SDK**: 最新稳定版本
17-
- **LSP 集成**: IntelliJ LSP API
18-
- **语言服务器**: `/Users/lvluo/Desktop/github.com/php-any/origami/bin/zy-lsp`
17+
- **实现方式**: 本地 Java 实现,无外部依赖
18+
- **参考项目**: [Haehnchen/idea-php-laravel-plugin](https://github.com/Haehnchen/idea-php-laravel-plugin)
1919

2020
## 项目结构规范
2121

2222
```
2323
src/
2424
├── main/
25-
│ ├── kotlin/
25+
│ ├── java/
2626
│ │ └── com/company/plugin/
2727
│ │ ├── language/ # 语言相关功能
28-
│ │ ├── lsp/ # LSP 客户端集成
2928
│ │ ├── completion/ # 代码提示
3029
│ │ ├── navigation/ # 代码跳转
3130
│ │ └── highlighting/ # 语法高亮
@@ -35,17 +34,17 @@ src/
3534
│ ├── icons/ # 图标资源
3635
│ └── fileTypes/ # 文件类型定义
3736
└── test/
38-
└── kotlin/
37+
└── java/
3938
```
4039

4140
## 开发原则
4241

43-
- 优先使用 Kotlin 而非 Java
42+
- 使用 Java 作为主要开发语言
4443
- 遵循 IntelliJ Platform 编码规范
4544
- 使用有意义的命名,避免缩写
46-
- 添加适当的中文 KDoc 注释
45+
- 添加适当的中文注释
4746
- 遵循 SOLID 原则和 Clean Architecture
4847
- 异步处理耗时操作
49-
- 优雅处理 LSP 连接失败
48+
- 本地实现所有功能,无外部依赖
5049
- **禁止使用临时跳过逻辑,必须完整实现所有功能**
5150
- **禁止删除本地缓存,避免重复下载依赖**

.cursor/rules/lsp-integration.mdc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
---
22
globs: *.kt,*Lsp*.kt,*lsp*.kt
33
description: LSP 集成和语言服务器连接规范
4+
deprecated: true
45
---
56

67
# LSP 集成开发规范
78

9+
> ⚠️ **已弃用**: 此规则已过时,项目已重构为本地 Java 实现,不再使用 LSP 集成
10+
811
## LSP 服务器配置
912

1013
- **服务器路径**: `/Users/lvluo/Desktop/github.com/php-any/origami/bin/zy-lsp`

.cursor/rules/syntax-highlighting.mdc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
globs: *Highlighting*.kt,*Syntax*.kt,*Lexer*.kt,*Parser*.kt
2+
globs: *Highlighting*.java,*Syntax*.java,*Lexer*.java,*Parser*.java
33
description: 语法高亮和词法分析器开发规范
44
---
55

.cursor/rules/testing.mdc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
globs: *Test*.kt,*test*.kt
2+
globs: *Test*.java,*test*.java
33
description: 测试开发规范和最佳实践
44
---
55

@@ -9,13 +9,13 @@ description: 测试开发规范和最佳实践
99

1010
- 使用 IntelliJ Platform 测试框架
1111
- 编写单元测试和集成测试
12-
- 使用 MockK 进行 Kotlin 代码模拟
12+
- 使用 Mockito / JUnit 进行 Java 代码模拟
1313
- 实现端到端测试
1414

1515
## 测试覆盖
1616

1717
- 为每个功能模块编写测试
18-
- 测试 LSP 连接和通信
18+
- (已移除)LSP 连接和通信相关测试
1919
- 测试语法高亮功能
2020
- 测试代码提示和跳转
2121

.cursor/rules/zy-file-support.mdc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ description: .zy 文件语法高亮和语法提示支持
2222

2323
## 语法提示功能
2424

25-
- 基于 LSP 的语法提示
25+
- 基于本地 Java 的语法提示
2626
- 支持关键字补全
2727
- 提供变量和函数提示
2828
- 实现上下文感知的智能提示
2929

30-
## LSP 集成
30+
## 本地实现
3131

32-
- 连接 LSP 服务器: `/Users/lvluo/Desktop/github.com/php-any/origami/bin/zy-lsp`
33-
- 支持 .zy 文件的 LSP 功能
34-
- 处理 LSP 连接和通信
32+
- 使用 IntelliJ PSI 和索引 API
33+
- 本地解析和索引 `.zy` 文件
34+
- 无外部依赖,离线可用
3535
- 提供错误恢复机制
3636

3737
## 性能要求

.cursor/rules/zy-lsp-client.mdc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
---
22
globs: *ZyLsp*.kt,*zyLsp*.kt,*Lsp*.kt
33
description: .zy 文件 LSP 客户端集成规范
4+
deprecated: true
45
---
56

67
# .zy 文件 LSP 客户端集成
78

9+
> ⚠️ **已弃用**: 此规则已过时,项目已重构为本地 Java 实现,不再使用 LSP 客户端
10+
811
## LSP 服务器配置
912

1013
- **服务器路径**: `/Users/lvluo/Desktop/github.com/php-any/origami/bin/zy-lsp`

build.gradle.kts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id("org.jetbrains.kotlin.jvm") version "1.9.10"
2+
id("java")
33
id("org.jetbrains.intellij") version "1.17.4"
44
}
55

@@ -11,17 +11,21 @@ repositories {
1111
}
1212

1313
dependencies {
14-
implementation("org.eclipse.lsp4j:org.eclipse.lsp4j:0.21.1")
14+
// 移除 LSP 依赖,使用本地 Java 实现
15+
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
1516
}
1617

1718
intellij {
1819
// 使用本地已安装的 IntelliJ IDEA,避免远程下载
1920
localPath.set("/Applications/IntelliJ IDEA.app/Contents")
20-
type.set("IC")
21+
// type.set("IC")
2122
downloadSources.set(false)
2223
plugins.set(listOf("com.intellij.java"))
2324
// 不自动写入 since/until 到 plugin.xml,由我们手动控制
2425
updateSinceUntilBuild.set(false)
26+
// 添加配置以解决Gradle兼容性问题
27+
pluginName.set("zy-language-support")
28+
// version.set("2024.1.3")
2529
}
2630

2731
tasks {
@@ -32,11 +36,22 @@ tasks {
3236
sourceCompatibility = "17"
3337
targetCompatibility = "17"
3438
}
35-
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
36-
kotlinOptions.jvmTarget = "17"
39+
40+
test {
41+
useJUnitPlatform()
3742
}
3843

3944
patchPluginXml {
4045
sinceBuild.set("241")
46+
untilBuild.set("241.*")
4147
}
42-
}
48+
49+
runIde {
50+
// 添加JVM参数以解决兼容性问题,包含调试支持
51+
jvmArgs = listOf(
52+
"-Djava.awt.headless=false",
53+
"-XX:MaxJavaStackTraceDepth=10000",
54+
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
55+
)
56+
}
57+
}

docs/development_guide.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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

Comments
 (0)