-
Notifications
You must be signed in to change notification settings - Fork 384
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: support inline completion highlight #4166
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #4166 +/- ##
==========================================
- Coverage 54.12% 54.00% -0.13%
==========================================
Files 1598 1599 +1
Lines 97740 97960 +220
Branches 20001 20058 +57
==========================================
+ Hits 52901 52902 +1
- Misses 37244 37428 +184
- Partials 7595 7630 +35
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
6deed40
to
1930886
Compare
Walkthrough该拉取请求引入了多个与智能补全功能相关的更改。主要新增了一个设置选项,用于高亮显示智能补全。此外,新增了两个类以管理编辑器中的“幽灵文本”功能,并更新了现有的接口和样式文件以支持这些新功能。整体结构保持不变,但增强了用户自定义选项和编辑器的响应能力。 Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Warning There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure. 🔧 eslint
warning eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options. Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🧹 Outside diff range and nitpick comments (10)
packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.module.less (1)
9-14
: 幽灵文本装饰样式实现得当新增的
.inline_completion_ghost_text_decoration
类:
- 正确使用了 VS Code 的主题变量
- 通过透明度和斜体样式清晰地区分了幽灵文本
- 边框样式增强了可见性
建议考虑添加以下改进:
.inline_completion_ghost_text_decoration { background-color: var(--vscode-editorGhostText-background); border: 1px solid var(--vscode-editorGhostText-border); opacity: 0.34; font-style: italic; + pointer-events: none; }
添加
pointer-events: none
可以确保幽灵文本不会干扰用户的鼠标交互。packages/core-common/src/settings/ai-native.ts (1)
19-19
: 建议添加注释说明新增的枚举成员
IntelligentCompletionsHighlight
实现符合现有代码规范,且与其他智能补全相关的配置项放在一起,结构清晰。建议为保持一致性,添加类似其他配置项的文档注释,说明该配置的具体用途。建议添加如下注释:
+ /** + * Whether to enable highlighting for intelligent completions + */ IntelligentCompletionsHighlight = 'ai.native.intelligentCompletions.highlight',packages/ai-native/src/browser/contrib/intelligent-completions/index.ts (1)
11-13
: 新接口设计合理,建议补充文档说明
IGhostTextWidgetModelEnhanced
接口的设计符合需求,通过扩展IGhostTextWidgetModel
来支持内联补全高亮功能。但建议添加以下改进:
- 为接口添加 JSDoc 注释,说明其用途和设计意图
- 为
targetCompletionModel
属性添加详细的注释说明+/** + * 增强的幽灵文本部件模型,用于支持内联补全高亮功能 + */ export interface IGhostTextWidgetModelEnhanced extends IGhostTextWidgetModel { + /** + * 目标补全模型,用于管理和控制内联补全的状态 + * 支持可设置的观察者模式,并确保正确释放资源 + */ readonly targetCompletionModel: ISettableObservable<InlineCompletionsModel | undefined, void> & IDisposable; }packages/ai-native/src/browser/preferences/schema.ts (1)
53-56
: 代码结构合理,建议添加描述信息新增的智能补全高亮配置项结构清晰,与其他智能补全相关配置放在一起,便于维护。但建议添加描述信息以提升用户体验。
建议按如下方式添加描述:
[AINativeSettingSectionsId.IntelligentCompletionsHighlight]: { type: 'boolean', default: false, + description: localize('preference.ai.native.intelligentCompletions.highlight.description'), },
packages/ai-native/src/browser/ai-core.contribution.ts (1)
355-358
: 建议提取设置注册逻辑以提高可维护性为了提高代码的可维护性和可读性,建议将智能补全相关的设置注册逻辑提取到一个单独的方法中。
建议按照以下方式重构:
+ private registerIntelligentCompletionsSettings(registry: ISettingRegistry) { + registry.registerSettingSection(AI_NATIVE_SETTING_GROUP_ID, { + title: localize('preference.ai.native.intelligentCompletions.title'), + preferences: [ + { + id: AINativeSettingSectionsId.IntelligentCompletionsCacheEnabled, + localized: 'preference.ai.native.intelligentCompletions.cache.enabled', + }, + // ... other intelligent completion settings + { + id: AINativeSettingSectionsId.IntelligentCompletionsHighlight, + localized: 'preference.ai.native.intelligentCompletions.highlight', + }, + ], + }); + } registerSetting(registry: ISettingRegistry) { // ... other settings registration if (this.aiNativeConfigService.capabilities.supportsInlineCompletion) { - registry.registerSettingSection(...) + this.registerIntelligentCompletionsSettings(registry); } }packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts (5)
115-116
: 建议将DisposableStore
声明为类的成员变量在第115行和第116行,多次创建
alwaysVisibleDisposable
和highlightDisposable
可能造成不必要的资源消耗。建议将它们声明为类的成员变量,以便在整个类的生命周期内管理这些可释放的资源。
Line range hint
143-165
: 避免直接访问私有属性_suggestWidgetAdaptor
在此代码段中,直接访问了
inlineCompletionsController
的私有属性_suggestWidgetAdaptor
。这种做法可能导致未来的兼容性问题,因为私有属性可能会在类的实现中发生变化。建议使用公开的接口或方法来实现相同的功能,以提高代码的稳定性和可维护性。
268-277
: 关注偏好设置变化时资源的正确释放在监听
IntelligentCompletionsHighlight
偏好设置变化时,注册和注销功能可能导致资源未正确释放。建议在unregisterHighlight
中销毁highlightDisposable
后,不要立即重新创建DisposableStore
,而是在需要时再创建,以避免不必要的资源分配。
222-227
: 优化unregisterAlwaysVisible
方法中的资源管理在
unregisterAlwaysVisible
方法中,销毁alwaysVisibleDisposable
后立即重新创建一个新的DisposableStore
。建议仅在需要时再创建新的实例,以避免额外的资源消耗。
271-276
: 确保偏好设置变化时资源的正确管理在偏好设置
IntelligentCompletionsHighlight
变化时,需确保highlightDisposable
的正确创建和销毁。建议在注销时不立即创建新的DisposableStore
,而是在下次注册时再创建,以优化资源管理。
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (9)
packages/ai-native/src/browser/ai-core.contribution.ts
(1 hunks)packages/ai-native/src/browser/contrib/intelligent-completions/decoration/ghost-text-tokenization.decoration.ts
(1 hunks)packages/ai-native/src/browser/contrib/intelligent-completions/index.ts
(1 hunks)packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts
(8 hunks)packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.module.less
(1 hunks)packages/ai-native/src/browser/preferences/schema.ts
(1 hunks)packages/core-common/src/settings/ai-native.ts
(1 hunks)packages/i18n/src/common/en-US.lang.ts
(1 hunks)packages/i18n/src/common/zh-CN.lang.ts
(1 hunks)
🔇 Additional comments (11)
packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.module.less (1)
Line range hint 1-7
: 现有的建议样式类看起来不错!
这些类使用了正确的变量命名约定,并且样式实现合理。
packages/ai-native/src/browser/contrib/intelligent-completions/index.ts (1)
2-5
: 验证新增依赖项的必要性
新增的 Monaco 相关导入看起来是合理的,它们支持了内联补全高亮的核心功能。但建议验证这些依赖项的使用情况。
✅ Verification successful
导入依赖项验证完成
这些导入的类型和接口在代码库中都有明确的使用:
IDisposable
用于资源释放管理ISettableObservable
用于可设置的观察者模式实现IGhostTextWidgetModel
用于幽灵文本小部件模型扩展InlineCompletionsModel
用于内联补全模型集成
这些导入都是必要的,它们支持了智能补全功能的核心实现。
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# 描述:验证新导入的类型和接口的使用情况
# 检查 IDisposable 的使用
rg "IDisposable" -t typescript
# 检查 ISettableObservable 的使用
rg "ISettableObservable" -t typescript
# 检查 IGhostTextWidgetModel 的使用
rg "IGhostTextWidgetModel" -t typescript
# 检查 InlineCompletionsModel 的使用
rg "InlineCompletionsModel" -t typescript
Length of output: 292
Script:
#!/bin/bash
# 修正:移除 -t typescript 标志,直接搜索这些类型和接口的使用
# 检查 IDisposable 的使用
rg "IDisposable"
# 检查 ISettableObservable 的使用
rg "ISettableObservable"
# 检查 IGhostTextWidgetModel 的使用
rg "IGhostTextWidgetModel"
# 检查 InlineCompletionsModel 的使用
rg "InlineCompletionsModel"
# 检查文件中这些类型的实际使用
rg -A 5 "class|interface|type" "packages/ai-native/src/browser/contrib/intelligent-completions/index.ts"
Length of output: 105545
packages/ai-native/src/browser/ai-core.contribution.ts (2)
355-358
: 代码实现符合预期!
新增的智能补全高亮设置遵循了现有的设置注册模式,并且正确地集成到了智能补全设置组中。
355-358
: 请验证新设置在UI组件中的处理逻辑
需要确保新增的智能补全高亮设置在相关的UI组件中得到正确处理。
✅ Verification successful
Let's examine the implementation details in these files to verify the UI handling.
智能补全高亮设置已正确集成到UI组件中
通过代码验证,该设置已经完整地集成到系统中:
- 在控制器中实现了正确的设置监听和处理逻辑(registerHighlight/unregisterHighlight)
- 在schema中定义了合适的类型(boolean)和默认值
- 在核心设置中定义了正确的设置标识符
设置的UI处理逻辑完整且符合系统架构要求,无需进一步修改。
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# 搜索智能补全高亮设置的使用情况
echo "检查智能补全高亮设置的使用情况..."
# 使用 ast-grep 搜索设置的使用
ast-grep --pattern 'IntelligentCompletionsHighlight'
# 使用 ripgrep 搜索可能的引用
rg -l "IntelligentCompletionsHighlight"
Length of output: 561
Script:
#!/bin/bash
# 检查设置在控制器中的具体使用
echo "检查智能补全高亮设置在控制器中的实现..."
rg -A 5 "IntelligentCompletionsHighlight" packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts
echo "\n检查设置的schema定义..."
rg -A 5 "IntelligentCompletionsHighlight" packages/ai-native/src/browser/preferences/schema.ts
echo "\n检查设置的类型定义..."
rg -A 5 "IntelligentCompletionsHighlight" packages/core-common/src/settings/ai-native.ts
Length of output: 1394
packages/i18n/src/common/zh-CN.lang.ts (1)
1263-1263
: 翻译内容准确且符合规范!
新增的智能补全高亮功能的翻译准确表达了设置项的用途,并且与其他智能补全相关的翻译保持一致的风格。
packages/i18n/src/common/en-US.lang.ts (1)
1498-1499
: 智能补全高亮配置项的本地化字符串添加正确!
新增的本地化字符串格式规范,描述清晰,并且与其他智能补全相关的配置项保持一致的命名风格。
packages/ai-native/src/browser/contrib/intelligent-completions/decoration/ghost-text-tokenization.decoration.ts (3)
378-385
: 正确地清理了视图区域资源
在 clear
方法中,调用了 changeAccessor.removeZone
并将 this._viewZoneId
重置为 undefined
,确保了视图区域资源的正确释放,防止了内存泄漏。
1-35
: 代码结构清晰,符合规范
导入的模块和定义的接口清晰明确,遵循了良好的代码风格和项目规范。代码的组织方式有助于维护和理解。
256-257
: 验证频繁调用 forceTokenization
对性能的影响
在虚拟模型中多次调用 tokenization.forceTokenization
方法(例如第256行和第406行),可能会对编辑器性能产生影响,特别是在处理大型文件或高频率操作时。建议验证这些调用是否会导致性能问题。
您可以运行以下脚本来统计代码库中 forceTokenization
的调用次数和位置,以评估其可能的性能影响:
Also applies to: 406-407
packages/ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts (2)
241-245
: 代码逻辑清晰,设置获取正确
对于 isHighlight
的获取和默认值设置,逻辑正确,符合预期。
15-22
: 导入的模块合理且必要
新增的导入模块如 IObservable
、constObservable
、mapObservableArrayCached
等对于功能实现是必要的,导入合理。
...src/browser/contrib/intelligent-completions/decoration/ghost-text-tokenization.decoration.ts
Show resolved
Hide resolved
...src/browser/contrib/intelligent-completions/decoration/ghost-text-tokenization.decoration.ts
Show resolved
Hide resolved
.../ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts
Show resolved
Hide resolved
.../ai-native/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts
Show resolved
Hide resolved
monaco 在 9 月份的时候已经实现了这一功能,后面我们只需要升级 monaco 即可,所以本 PR 可以不用合了 |
Types
Background or solution
hightlight_inline_completion.mp4
Changelog
内联补全支持代码高亮
Summary by CodeRabbit
新功能
GhostTextTokenization
和AdditionalLinesWidget
类,增强了代码编辑器中的内联补全功能。样式
.inline_completion_ghost_text_decoration
,用于样式化编辑器中的幽灵文本。本地化