Files
MujicaUI/docs/components/333-symbol-outline.md

1.9 KiB

333 SymbolOutline · 符号大纲

用途

以树显示文件中的符号,带类型标记,可筛选,并跟随编辑器光标选中所在符号。

最小示例

symbols := []code.Symbol{{Name: "Court", Kind: code.SymbolType, Line: 3, EndLine: 40, Children: []code.Symbol{
	{Name: "Seal", Kind: code.SymbolMethod, Line: 10, EndLine: 20},
}}}
var state code.SymbolOutlineState
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	r := code.SymbolOutline(c, symbols, &state, code.SymbolOutlineOptions{CursorLine: 12})
	r.Element.Height(240)
	if r.Jumped != nil {
		fmt.Println("go to line", r.Jumped.Line)
	}
}
ui.Render(view, 400, 300, 1)

参数

func SymbolOutline(c *ui.Context, symbols []Symbol, s *SymbolOutlineState, opts SymbolOutlineOptions) SymbolOutlineResult。符号树在数据变化时编号一次。

字段 类型 默认值 含义
Symbol.Name, Detail string — 名称与补充说明(如签名)。
Symbol.Kind SymbolKind SymbolFunction 函数 f、方法 m、类型 T、接口 I、字段 p、变量 v、常量 c、模块 M;越界 panic。
Symbol.Line, EndLine int — 所在行范围,从 1 开始。
SymbolOutlineState.Query string "" 筛选文字;匹配项与其祖先保留并自动展开。
CursorLine int 0(不跟随) 变化时选中包含该行的最内层符号并展开祖先。
Disabled bool false 不能跳转。

状态

类型以字母徽记加颜色区分;选中行 Selection 与菱形;筛选高亮;无符号;禁用。

事件

Jumped:用户要跳转的符号。

键盘操作

  • Tab 到达筛选框与树;↑/↓ 移动,→ 展开或进入子项,← 折叠或回到父项;输入字母按名称定位。
  • Enter 或双击:跳转到符号。

限制

  • 光标跟随只在 CursorLine 变化时生效,之后用户可自由移动选择。