✨ feat(vscode): 代码阅读预览里跨几行写的列表按项拆开,列表里整项是调用的带着自己的实参表,一层层能往下套
This commit is contained in:
1 parent
7d6e7592c9
commit
2c490cac2d
22 files changed
+848
-314
No files matched your search
@@ -322,10 +322,23 @@ export interface ImportFacts {
|
||||
|
||||
/** 字典 / 对象字面量里的一项,照源码顺序;注释不算。 */
|
||||
export type EntryFacts
|
||||
= | { kind: 'pair', key: Node, value: Node, entries?: EntryFacts[] } // 'a': 1、a: 1、[k]: v;TypeScript 的简写 { a } 键和值是同一个节点;entries 同 DeclaratorFacts.entries
|
||||
= | { kind: 'pair', key: Node, value: Node } // 'a': 1、a: 1、[k]: v;TypeScript 的简写 { a } 键和值是同一个节点
|
||||
| { kind: 'spread', value: Node } // **other、...other:value 是展开的那个表达式
|
||||
| { kind: 'method', name: Node, node: Node, header: SourceSpan } // 对象字面量里的方法、getter、setter:node 是整个方法,header 同 BlockShape.header,只到主体开始之前
|
||||
|
||||
/** 列表 / 元组 / 集合 / 数组字面量里的一项,照源码顺序;注释不算。 */
|
||||
export type ElementFacts
|
||||
= | { kind: 'item', value: Node } // 写出来的一项
|
||||
| { kind: 'spread', value: Node } // *other、...other:value 是展开的那个表达式
|
||||
|
||||
/**
|
||||
* 写出各项的字面量:语言插件从语法树读出结构(LanguageAdapter.collection),翻译插件把各项拆成子行。
|
||||
* map 是字典 / 对象,sequence 是列表 / 元组 / 集合 / 数组;空字面量的各项是空数组。节点都指向源码,项的值里还能再套字面量。
|
||||
*/
|
||||
export type CollectionFacts
|
||||
= | { kind: 'map', entries: EntryFacts[] }
|
||||
| { kind: 'sequence', elements: ElementFacts[] }
|
||||
|
||||
/** 写在表达式里的遍历得到什么:逐个产出的生成器,或一次建好的列表、集合、字典。 */
|
||||
export type IterationResult = 'generator' | 'list' | 'set' | 'dict'
|
||||
|
||||
@@ -361,8 +374,8 @@ export type CallArgument
|
||||
| { kind: 'keywordSpread', value: Node } // 展开成按名字传的几个:Python 的 **kwargs
|
||||
|
||||
/**
|
||||
* 一次调用(含新建对象):语言插件从语法树读出结构(LanguageAdapter.call),翻译插件把跨几行写的调用排成
|
||||
* 「新建 / 调用 被调用的名字 · N 个参数」一行,实参摊成一张表。节点都指向源码。
|
||||
* 一次调用(含新建对象):语言插件从语法树读出结构(LanguageAdapter.call),翻译插件把跨几行写的调用(拆开的列表里整项是调用的,
|
||||
* 写成一行也算)排成「新建 / 调用 被调用的名字 · N 个参数」一行,实参摊成一张表。节点都指向源码。
|
||||
*/
|
||||
export interface CallFacts {
|
||||
/** 被调用的表达式:`user_service.update_user`、`UserDetailResponse`;TypeScript 的 new 不算在里面。 */
|
||||
@@ -450,8 +463,6 @@ export interface DeclaratorFacts {
|
||||
name: Node
|
||||
type?: Node
|
||||
value?: Node
|
||||
/** 值是字典 / 对象字面量(Python 的 dictionary、TypeScript 的 object)时是它的各项,空字面量是空数组;别的值没有。 */
|
||||
entries?: EntryFacts[]
|
||||
}
|
||||
|
||||
export interface VariableFacts {
|
||||
@@ -667,23 +678,27 @@ export type PreviewText = Inline[] | Markdown
|
||||
export interface Defines { defines?: SourceRange }
|
||||
|
||||
/**
|
||||
* 属性表里展开的一个子行:几列对齐的格子,例如参数的名称 / 类型 / 默认值、字典一项的键 / 值。
|
||||
* 属性表里展开的一个子行:几列对齐的格子,例如参数的名称 / 类型 / 默认值、字典一项的键 / 值、列表的第 N 项 / 值。
|
||||
* 格子是着色的词,或一段 Markdown(参数的说明、异常的触发条件)。
|
||||
*/
|
||||
export interface PropertyItem extends Defines {
|
||||
cells: PreviewText[]
|
||||
/** 展开在这个子行下面的下一层子行(字典 / 对象的值又是字典 / 对象时,它的各项);一层层可以一直往下套。 */
|
||||
/**
|
||||
* 最后一格的值拆开的下一层子行(值是字典 / 对象、跨几行写的列表时,它的各项):排成列表的子行把它展开在自己下面,能折叠;
|
||||
* 表格的行把它排在最后一格里、那格文字下面,总是展开。一层层可以一直往下套。
|
||||
*/
|
||||
items?: PropertyItem[]
|
||||
/**
|
||||
* 排在这一行最后一格里、那格文字下面的表:实参表里一个实参的值里有跨几行写的调用时,是那个调用的实参表,
|
||||
* 表里的行又可以带 table,一层层往下套。总是展开的。
|
||||
* 最后一格的值里那次调用的实参表(跨几行写的调用;列表里整项是调用的,写成一行也算):表格的行把它排在最后一格里、
|
||||
* 那格文字下面,排成列表的子行把它排在自己下面。总是展开的;表里的行又可以带 items、table,一层层往下套。
|
||||
*/
|
||||
table?: PreviewTable
|
||||
}
|
||||
|
||||
/**
|
||||
* 属性表的一行:左列属性名,右列着色的值或 Markdown 说明;items 是展开在这一行下面的子行(输入参数、导入项、字典 / 对象的各项)。
|
||||
* columns 是子行各列的列名(输入参数的名称 / 类型 / 默认值):给了列名的子行排成带表头和边框的表格,没给的排成列表;表格只有一层,子行不再往下套。
|
||||
* 属性表的一行:左列属性名,右列着色的值或 Markdown 说明;items 是展开在这一行下面的子行(输入参数、导入项、字典 / 对象、列表的各项)。
|
||||
* columns 是子行各列的列名(输入参数的名称 / 类型 / 默认值):给了列名的子行排成带表头和边框的表格,没给的排成列表;
|
||||
* 两种子行都能再带下一层(PropertyItem.items、table)。
|
||||
*/
|
||||
export interface PropertyRow extends Defines {
|
||||
label: string
|
||||
@@ -735,6 +750,8 @@ export interface LanguageAdapter {
|
||||
iteration?: (node: Node) => IterationFacts | undefined
|
||||
/** node 是一次调用(含新建对象)时给出它的结构,别的节点没有;没给的语言不展开调用,照常一行译文。 */
|
||||
call?: (node: Node) => CallFacts | undefined
|
||||
/** node 是写出各项的字面量(字典、列表……)时给出它的各项,别的节点没有;没给的语言不拆字面量,照常一行译文。 */
|
||||
collection?: (node: Node) => CollectionFacts | undefined
|
||||
/** node 是执行一条命令(shell)时给出它的结构,交给命令规则读;别的节点没有,没有命令的语言不填。 */
|
||||
command?: (node: Node) => CommandFacts | undefined
|
||||
/** 一份源码里自己认得出的名字(见 LocalSymbol);VS Code 有这种语言的定义、高亮提供者时用不上,不填。 */
|
||||
|
||||
Reference in new issue
Block a user