Skip to content

fix(desktop): #1794 插件设置列表填满页面,最后一项不再被截断 - #1848

Merged
xiaoyumuxi merged 1 commit into
previewfrom
fix/1794-plugin-settings-list-height
Nov 13, 2026
Merged

xiaoyumuxi merged 1 commit into
previewfrom
fix/1794-plugin-settings-list-height

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进
  • fix:缺陷修复
  • docs:文档、Agent Note、Skill 等规则文件
  • release:稳定版发布准备

改动说明 / What changes

背景 / Why

插件设置表单(例如 设置 › 语言与框架 › Go 的 gopls 设置)里的设置列表固定 360 像素高:

  • 窗口矮时,列表伸到窗口底部的确定/取消按钮下面,最后几项被截掉,滚到底也看不全。
  • 窗口高时,列表下面留出一大片空白。

已安装插件详情里的“设置”标签页有同样的问题。

改动 / Changes

设置列表(settingswindow/plugin_settings_view.go)

  • 删除列表的固定 Height(360),改为占满表单标题下剩下的高度(Grow(1)),最后一项与页面底部对齐。
  • 新增常量 settingsListMinHeight = 160:列表最少 160 像素高。窗口给不了这个高度时滚动整页,而不是继续压缩列表或截断。160 像素在最小窗口(520 高)的已安装插件详情里仍能完整放下。
  • 表单外层的列改为 Grow(1),把剩余高度传给列表;补了说明父容器要求的注释。

语言、构建系统等插件设置页(settingswindow/settings_surfaces.go)

  • 页面的外层列改为滚动区域,按页面键命名(c.Key(w.dynamicPage)),每次打开某页都从顶部开始,与内置设置页的 pageScroll 一致。
  • 内容放得下时,滚动区域把多出的高度分给表单,列表随之填满;放不下时整页滚动。

已安装插件详情(settingswindow/installed_view.go)

  • 标签页内容的列加 Grow(1),在滚动区域里撑满可见高度,“设置”标签页的列表因此能填满标签栏下方。其他标签页只是列变高,内容仍从顶部排列,看起来不变。

测试(settings_surfaces_test.go、installed_view_test.go)

  • 新增 flagsManifest:在共享 settings-documents fixture 的清单基础上生成 30 个布尔设置,全部放在 elixir 语言页。
  • 新增 measureSettingsList、checkSettingsListFills:
    • 先在列表上方转动滚轮,把整页滚到底,再量列表的可见高度,以及列表底边到确定按钮的距离。
    • 然后把列表滚到最后一行,检查最后一项完整画在列表内。
  • 窗口高度取最小窗口、800、1000 三档,分别检查:
    • 800 → 1000:列表正好长高 200 像素,与确定按钮的距离不变。
    • 最小窗口:整页滚动后能看到完整的 160 像素列表。
  • TestSettingsDynamicPageListFillsThePageAndShowsItsLastRowWhole:语言页。
  • TestInstalledSettingsTabListFillsTheDetail:已安装插件的“设置”标签页。

功能矩阵(shared/platform-feature-matrix/features/declarative-plugin-settings.json)

  • macOS、Windows 证据补上 installed_view.go、installed_view_test.go;verification 末尾补一句本次的布局和测试。实现与验证状态不变。

不在本 PR 范围内 / Out of scope

  • 设置页 ⓘ 提示改到图标右侧:需要先在 Lithe-IDEA/viva 给 Tooltip 加显示方向,另行提交。

类型专属:fix

复现与根因

  • 复现步骤、实际结果、期望结果:
    1. 启用带设置的语言插件(如 Go Support),把设置窗口调到较矮。
    2. 打开 设置 › 语言与框架 › Go,滚动设置列表到底。
    3. 实际结果:最后一项(Parameter placeholders in completion)被窗口底部按钮挡住、只露出一半;把窗口拉高后,列表下方出现大片空白。
    4. 期望结果:列表随窗口高度伸缩,最后一项完整显示。
  • 根因:Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799(0faecba49)迁移到 Viva 时,设置列表写成了固定 Height(360).Shrink(0),不随窗口变化。外层页面不能滚动,放不下的部分直接被裁掉。
  • 影响平台:Viva 桌面端(macOS、Windows、Linux 共用这份代码)。

检查项

  • 已先写回归测试,确认它在修复前失败、修复后通过;测试路径与修复前的失败输出:
    • TestSettingsDynamicPageListFillsThePageAndShowsItsLastRowWhole(desktop/internal/settingswindow/settings_surfaces_test.go)修复前:the list grew 0 for a window 200 taller: {height:360 gap:87}, {height:360 gap:287}。最小窗口下 gap 为 -193,即列表底边在确定按钮下方 193 像素处。
    • TestInstalledSettingsTabListFillsTheDetail(desktop/internal/settingswindow/installed_view_test.go)修复前:the list grew 0 for a window 200 taller: {height:360 gap:36}, {height:360 gap:202}。
  • [N/A] 无法自动化时,已写明手动复现与验证步骤:已自动化
  • 已搜索被修改函数、类型、契约字段的全部调用方(含另一平台、插件、SDK、脚本和按字符串分发的调用):pluginSettingsPanel 只有 installedDetail 和 dynamicSettingsPage 两处调用,都已改成滚动区域并撑满。
  • 已检查另一平台是否有同类缺陷(有则本 PR 一并修复,或已提交 Issue):三个平台共用这份 Viva 代码,本 PR 一并修复。设置窗口里也没有别的固定高度列表(stepping_view.go 的 Height(140) 是多行文本框)。
  • 只改了修复所需的代码,没有夹带重构;修复过程中发现的其他问题已提交 Issue:无新问题
  • [N/A] 修复改变了行为约束或容易复发,已在 .agents/notes/implemented/bug-fix/ 记录:约束已写在 pluginSettingsPanel 的注释里,并有两个回归测试覆盖,不另写 Note

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/declarative-plugin-settings.json:两端的实现状态和验证状态、证据路径、owner、验证动作都如实填写;没有运行验证的保持 pending
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh;改了平台实现路径的,还运行了 ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的,理由:已更新

统一日志系统 / Structured logging

N/A:只改布局,没有新增或改动生命周期、终态、降级或失败路径。

界面文案 / i18n

N/A:没有新增或修改用户可见文字。已运行 node scripts/i18n/verify-app-language-localization.mjs 和 node scripts/i18n/generate-i18n.mjs --check,均通过。

逻辑归属 / Logic placement

N/A:只改 Viva 视图的布局,没有业务逻辑。

性能与内存 / Performance and memory

  • 功能、子进程、语言服务器、WebView 首次需要才启动;没有新增空闲轮询;缓存和缓冲有上限;关闭项目、窗口、面板、标签时释放独占资源:没有新增这些
  • 主线程没有文件读写、目录遍历、进程启动;跨 C ABI、Tauri IPC、WebView 只传增量或可见窗口:列表仍只声明可见行(ui.List 虚拟化不变)
  • [N/A] 涉及启动、打开项目、输入、滚动、大文件、长输出或搜索的,已附改动前后的性能基线数据:只改布局尺寸,不涉及编辑器模块

设置 / Settings

  • [N/A] 难以理解的项有 ⓘ;用户可修改的配置在自动、默认、继承时显示为“自动(实际生效值)”:没有新增或修改设置项
  • [N/A] 非敏感的工具配置读取并回显工具的真实来源:读写逻辑不变
  • [N/A] 新增或移动 macOS 设置页的,归属已按设置页分类 Note 确定:没有新增或移动设置页

插件契约 / Plugin contract

N/A:不涉及契约、能力版本、插件函数协议或宿主方法。

发行包与资源 / Bundle and resources

N/A:没有新增运行时资源。已运行 zsh scripts/desktop/verify/verify-runtime-bundle-immutability.sh,通过。

无用代码与重构 / Dead code and refactoring

  • 本次改动导致变成无用的代码已在本 PR 删除:没有因此变成无用的代码
  • 本次之前就存在的无用代码或可重构之处,已提交带 refactor 标签的 Issue,没有在本 PR 顺手处理:无

验证 / Verification

命令或操作 平台 结果
scripts/desktop/desktop-go.sh test ./internal/settingswindow/ -run ListFills -count=1(修复前) macOS 两个新测试均失败(见上方失败输出)
scripts/desktop/desktop-go.sh test ./internal/settingswindow/ -run ListFills -count=1(修复后) macOS 通过
scripts/desktop/desktop-go.sh test ./... -count=1 macOS 通过
scripts/desktop/desktop-go.sh vet ./internal/settingswindow/、gofmt -l macOS 通过,无输出
node scripts/i18n/verify-app-language-localization.mjs、node scripts/i18n/generate-i18n.mjs --check macOS 通过
./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh macOS 通过(219 项)
./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD macOS 通过
./.agents/skills/write-stable-tests/scripts/verify-test-stability.sh --base origin/preview macOS 通过
zsh scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS 通过

未能执行的检查和原因: Windows、Linux 没有在本机运行,留给 CI。没有启动打包后的应用做整机验收,只用 Viva 无头驱动在三档窗口高度下验证。

提交前确认 / Final checks

  • 分支从最新的 preview 创建;目标分支:feat、fix、docs 为 preview,release 以发布流程要求为准
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交 .build/、target/、dist/、.artifacts/ 等产物,没有凭据、个人路径和未脱敏的日志或截图
  • 本次构建、测试或预览启动的 Lithe 应用和子进程已全部关闭,没有进程残留:只运行了无头测试,没有启动应用

插件设置表单的设置列表原来固定 360 像素高:窗口矮时列表伸到底部按钮下面,
最后几项被截掉;窗口高时列表下面留一大片空白。

- 设置列表改为填满表单标题下剩下的高度,最少 160 像素。
- 语言、构建系统等插件设置页改成滚动区域(按页面命名,每次打开从顶部开始),
  内容撑满可见高度;窗口放不下列表最小高度时滚动整页,不再截断。
- 已安装插件详情的“设置”标签页内容同样撑满滚动区域。
- 新增测试:最小窗口、800、1000 三个高度下,列表随窗口等量增长、底部与
  确定按钮间距不变,最小窗口滚动后能完整看到列表,最后一项完整绘制在列表内。
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 13, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 13, 2026 09:21
@xiaoyumuxi
xiaoyumuxi merged commit a6f68e7 into preview Nov 13, 2026
6 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant