跳到正文

选择范围 ​

按语法扩大和缩小选区(textDocument/selectionRange):每一步都把选区扩大到外层的下一个构造——表达式、连同分号的语句、声明、代码块——也会停在只有文本才看得出的位置,例如一对括号的内部、字符串字面量的文本或注释。以只读模式提供服务、没有编译出 AST 的文件,获得纯文本层面的选择步骤。

语法范围 ​

从光标所在的名称出发,沿代码结构逐步向外扩大的选择步骤。

支持

嵌套表达式

选区从光标所在的名称出发,依次扩大到外层的各层表达式和语句

支持

语句与声明

先选中语句或声明在分号之前的部分,再将结尾的分号纳入选区

局部变量从声明符扩大到整条声明语句。成员、全局变量或函数声明以同样方式纳入分号;模板声明先纳入分号,再把 template 头并入选区。

支持

实参与形参列表

先选中调用的实参列表和函数的形参列表本身,再把两侧的圆括号纳入选区

支持

模板实参与形参列表

先选中尖括号内的模板实参列表和模板参数列表,再把尖括号纳入选区

宏实参

先在宏实参的书写位置选中其中的名称或表达式,再依次选中实参列表和整个宏调用

宏替换文本围绕实参拼出的代码在文件中并没有独立的位置:选区会从实参直接扩大到整个宏调用。

支持

Lambda 表达式

选区扩大到整个 Lambda 表达式的过程中,捕获列表、形参列表和函数体各自作为一个独立的步骤

支持

代码块及其内容

先选中代码块中的语句、类中的成员和命名空间中的声明,再把两侧的花括号纳入选区

光标停在代码块内的空行上时,从代码块的内容开始选择。

支持

函数签名

先选中函数名连同函数签名,再扩大到整条声明

签名从返回类型开始(构造函数从其名称开始),延伸过形参列表以及声明在其后附加的部分,例如 const noexcept、尾置返回类型、override 或 requires 子句。

支持

switch 分支

先选中 case 标签连同它引导的各条语句,再扩大到整个 switch 语句体

支持

带文档注释的声明

无论光标在声明内还是在其文档注释内,选区都会将声明连同其文档注释一起选中

在跨越多行的块注释内,先选中光标所在的那一行,不含行首的 *。

文本范围 ​

仅凭文本划分的选择步骤:字面量引号内的内容、注释的正文、指令所在的整行。

支持

字符串与字符字面量

先选中字符串或字符字面量的文本,再把引号纳入选区

编码前缀、原始字符串的定界符和用户定义后缀都不算在文本之内。

支持

注释

先选中不含注释标记的注释正文,再选中整条注释,最后选中它所属的一片连续注释行

支持

预处理指令

先选中指令包含的头文件名或宏体中的括号范围,再选中指令所在的整行

条件编译 ​

在 #if 块的代码中逐步扩大选区,预处理器跳过的分支也包含在内。

支持

条件编译块

先选中分支内部的代码,再依次选中该分支的各行以及从 #if 到 #endif 的整个条件编译块

预处理器跳过的分支同样具备这些步骤,因此可以整体选中其中的代码。