0

0

VSCode智能选择提供者开发

幻影之瞳

幻影之瞳

发布时间:2025-10-31 18:40:02

|

577人浏览过

|

来源于php中文网

原创

实现智能选择功能需注册SelectionRangeProvider,通过解析语法结构按层级返回从内到外的选择范围数组,如变量→表达式→语句→函数,每个SelectionRange通过parent形成链式结构,顺序为内层到外层,配合expand/shrink命令实现精准选区调整。

vscode智能选择提供者开发

在 VSCode 中开发智能选择(Smart Select)功能,主要是通过实现 “智能选择提供者”Selection Range Provider)来完成。这个功能允许用户通过“扩展选择”(Expand Selection)和“缩小选择”(Shrink Selection)命令,按语法结构逐层调整选区范围,比如从一个变量名扩展到表达式、语句块,再到整个函数。

实现 SelectionRangeProvider 接口

要为你的语言添加智能选择支持,需要在 VSCode 扩展中注册一个 SelectionRangeProvider。该提供者根据当前光标位置,返回一个嵌套的选择范围数组,从最内层开始,逐层向外扩展。

接口定义如下:

selectionRangeProvider: {
  provideSelectionRanges(
    document: TextDocument,
    positions: Position[],
    token: CancellationToken
  ): ProviderResult;
}

其中每个 SelectionRange 包含一个 range 字段,并可选地指向其 parent,形成链式结构。

注册智能选择提供者

extension.tsactivate 函数中注册提供者:

vscode.languages.registerSelectionRangeProvider('yourLanguage', {
  provideSelectionRanges(document, positions) {
    return positions.map(position => {
      // 从当前位置构建选择层级
      return buildSelectionRange(document, position);
    });
  }
});

'yourLanguage' 替换为你支持的语言标识符,如 javascriptmyLang 等。

构建选择层级的逻辑

核心在于解析文档内容,找到光标所在位置的语法结构。你可以:

科大讯飞-AI虚拟主播
科大讯飞-AI虚拟主播

科大讯飞推出的移动互联网智能交互平台,为开发者免费提供:涵盖语音能力增强型SDK,一站式人机智能语音交互解决方案,专业全面的移动应用分析;

下载
  • 使用正则匹配简单结构(适合轻量语言)
  • 集成 AST 解析器(如 Tree-sitter、Chevrotain、ANTLR 生成的解析器)获取精确语法节点

示例:从一个变量向外围扩展

function buildSelectionRange(document: vscode.TextDocument, position: vscode.Position) {
  const text = document.lineAt(position).text;
  const wordRange = document.getWordRangeAtPosition(position);
  if (!wordRange) return null;

let currentRange = new vscode.Selection(wordRange.start, wordRange.end); const ranges = [];

// 模拟逐层扩展:词 → 表达式 → 语句 → 块 ranges.push(new vscode.SelectionRange(currentRange));

// 向前查找分号或换行,构造语句范围 const statementRange = getStatementRange(document, position); if (statementRange && !statementRange.isEqual(currentRange)) { ranges.push(new vscode.SelectionRange(statementRange, ranges[0])); }

// 更外层:函数体、类等,依此类推 const functionRange = getFunctionRange(document, position); if (functionRange) { ranges.push(new vscode.SelectionRange(functionRange, ranges[ranges.length - 1])); }

return ranges.reverse(); // VSCode 需要从外到内?实际是从内到外!保持顺序:内 → 外 }

注意:VSCode 要求返回的数组顺序是“从最内层开始,逐级 parent 指向外层”,即 [inner, middle, outer],每个的 parent 指向前一个更外层的范围。

测试与调试

使用快捷键 Shift+Alt+RightArrow(扩展选择)查看效果。打开命令面板执行 “Developer: Inspect Editor Tokens and Scopes” 可辅助定位光标处的语法信息。

确保你的语言服务器或文本处理逻辑能准确识别嵌套结构,避免跳层或遗漏。

基本上就这些。只要正确构建 selection range 链,VSCode 就能智能响应用户的选区操作。不复杂但容易忽略 parent 关联和顺序问题。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

289

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

259

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

126

2025.08.07

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1179

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

215

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2089

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号