Skip to content

feat(settings): 接入插件函数协议 4 的设置中转,Maven/Gradle 新建项目内容移交对应插件 - #5

Merged
xiaoyumuxi merged 1 commit into
mainfrom
feat/settings-relay-protocol-4
Nov 5, 2026
Merged

xiaoyumuxi merged 1 commit into
mainfrom
feat/settings-relay-protocol-4

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Contributor

做了什么

Java 拆分的一部分:Maven/Gradle 的导入设置改由对应插件提供,Java 插件通过 API-35 跨插件函数中转拿到并交给 JDT LS;Maven/Gradle 的新建项目内容移出本插件。

设置中转(API-35,插件函数协议 4)

  • 后端升级到 Rust SDK 0.3.0(插件函数协议 4,sdk.lock.json 同步)。
  • 主动收集:宿主通知 JDT LS 进入 running 后,后端发现所有导出 languageImport.settings 的插件,逐个调用(每个 10 秒超时)。只接受 JDT 导入设置命名空间里的键,按提供方分槽合并,再用 languageServer/notify 发 workspace/didChangeConfiguration。代码里不出现任何 Maven/Gradle 插件 ID。
  • 变化通知:导出 languageImport.settingsChanged(context: "workspace")。调用方插件 ID 取自 Core 写入的 caller,用它整份替换该插件的槽。可选的 projects: [{projectUri, selectedProfiles}] 让后端对每个工程发 java.project.updateSettings(Maven profiles)。
  • 过渡规则:没有任何提供方参与时不推送,宿主 JDT 集成原有的设置继续生效,行为不变。
  • 日志:新增 relay.*、session.* 降级类别,settingsChanged 进关键操作,见 README“日志”。

清单与打包

  • plugin.json:
    • requires 加 backend: 2、pluginFunctions: 1,languageServers 升到 3。
    • 权限加 backend.launch、languageServer.request、workspace.metadata,激活事件加 onWorkspaceOpen。
    • 语言服务器声明 requestMethods: ["workspace/executeCommand"]、commands: ["java.project.updateSettings"]。
    • 新增 backend,launch.kind 为 packaged,路径 bin/lithe-java-backend。
    • 语言服务器的 launch 和 hostIntegration 不变。
  • assemble-package.sh 按目标架构编译 Rust 后端,放进 bin/。
  • verify-package.sh 检查 bin/ 里只有后端、后端可执行、架构与包一致。
  • CI 和发布工作流安装 Rust 工具链和两个 Apple target。

新建项目

  • Maven、Gradle 入口与模板、Maven 图标移到 lithe-plugin-maven 和 lithe-plugin-gradle。
  • 本插件的 Java 入口只剩“无构建工具”的工程;Spring Boot 入口不变。
  • NOTICE 去掉 Maven 图标。

文档

  • README、MIGRATION 更新到当前实现。
  • release.yml 写明仍发预发布的原因。

合入顺序

要和 Lithe-IDEA/lithe-plugin-maven#12 、Lithe-IDEA/lithe-plugin-gradle#6 一起合入、一起发版。只合这个 PR,新建项目窗口里会少掉 Maven 和 Gradle 入口。

已知限制(后续 PR)

  • JDK 列表还没接:等宿主的 API-23 toolchains.list,代码里留了 TODO,JDT LS 的 VM 登记保持现状。
  • 只通过 settingsChanged 推送、不导出 languageImport.settings 的插件,在下一次重新收集时会丢掉自己的槽。
  • JDT LS 重启后,之前的工程 profiles 更新不会重发。
  • 不上报 Pending 状态。
  • 工作区状态条目不回收。
  • 后端在 JDT LS 已经 running 之后才启动时,收不到 running 事件,不会主动收集。
  • Maven 插件导出 languageImport.settings 在 lithe-plugin-maven 单独做(Rust 后端),在那之前本 PR 在真实宿主上没有提供方,走过渡规则。

验证

  • cargo fmt --check、cargo clippy -D warnings:通过。
  • cargo test:344 个测试通过(领域 281 个,后端单元 54 个、repository_pins 6 个、session 3 个)。
  • scripts/verify-sdk-lock.sh --download:SDK 0.3.0 的 crate 哈希与锁一致。
  • scripts/build-package.sh --arch arm64(本机 Rust 1.99.0):通过,包里有 Rust 后端,verify-package.sh 的 bin/、可执行和架构检查通过。x86_64 和 universal 包交给 CI。

- 后端升级 Rust SDK 0.3.0,JDT LS running 后收集 languageImport.settings 并推送 didChangeConfiguration
- 导出 languageImport.settingsChanged,按调用方分槽替换,可选 projects 触发 java.project.updateSettings
- 打包加入 Rust 后端 bin/lithe-java-backend,verify-package 校验架构
- Maven/Gradle 新建项目入口、模板与 Maven 图标移到 lithe-plugin-maven、lithe-plugin-gradle
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant