Skip to content

Module generate:symbol

Summary

generate:symbol 模块承担符号文档页面的生成职责。它负责从提取的符号信息中构建文档计划(SymbolDocPlan),规划页面布局(PageDocLayout),并渲染包括前置元数据、声明片段、成员列表、关系链接和嵌入内容在内的完整符号页面。模块公开了用于追加符号文档页面(append_symbol_doc_pages)、添加文档链接(add_symbol_doc_links)、追加类型成员章节(append_type_member_sections)、构建页面布局(build_page_doc_layout)、遍历符号文档组(for_each_symbol_doc_group)等核心接口,同时提供标题规范化(normalize_frontmatter_title)和子页面支持判断(page_supports_symbol_subpages)等辅助功能。该模块是文档生成管线中连接符号提取与最终 Markdown 输出的关键环节。

Imports

Imported By

Types

clore::generate::PageDocLayout

Declaration: generate/render/symbol.cppm:19

Definition: generate/render/symbol.cppm:19

Declaration: Namespace clore::generate

内部结构将三种符号的文档计划按类别分组:type_docsvariable_docsfunction_docs 均为 std::vector<SymbolDocPlan>,分别记录类型、变量和函数的渲染方案;index_paths 是一个 std::unordered_map<std::string, std::string>,用于维护符号全限定名到生成索引文件路径的映射。

结构体不要求这些向量保持任何特定的顺序或唯一性,调用侧在填充时自行保证分类正确性。该布局仅通过聚合这些独立容器来组织整个页面的文档计划,没有自定义构造函数或复杂成员函数,因此所有成员均在构造时默认为空,并由外部赋值或插入。

Invariants

  • 每个向量只包含对应类型符号的文档计划
  • index_paths 键值对表示从符号名称到文件路径的映射

Key Members

  • type_docs
  • variable_docs
  • function_docs
  • index_paths

Usage Patterns

  • 用于在文档生成过程中收集和组织符号文档计划
  • 由渲染阶段消费以生成最终页面

clore::generate::SymbolDocPlan

Declaration: generate/render/symbol.cppm:13

Definition: generate/render/symbol.cppm:13

Declaration: Namespace clore::generate

clore::generate::SymbolDocPlan 是符号文档生成计划中的节点,内部通过 symbol 指向源符号信息、index_path 记录该符号在输出索引中的路径、以及 children 存储子符号的递归计划。该结构以树形组织符号层级,其中每个节点的 children 集合中的元素与当前符号的嵌套符号一一对应,并且子节点的 index_path 预期基于父节点路径拼接而成,从而在渲染阶段能够正确构建文档的导航结构。一个重要的不变性在于:children 中的所有 SymbolDocPlan 实例共享同一父级符号上下文,且 index_path 不会重复出现在同级节点中。

Invariants

  • symbol may be null if the plan is a placeholder or root container
  • children may be empty indicating no nested symbols
  • index_path is expected to be a valid relative path string

Key Members

  • symbol
  • index_path
  • children

Usage Patterns

  • Used to build a tree of documentation plans for symbols in a module
  • children vector enables recursive traversal for generating nested documentation pages

Variables

Declaration: generate/render/symbol.cppm:43

Declaration: Namespace clore::generate

Used within clore::generate::(anonymous namespace)::render_symbol_page to insert relevant link paragraphs, likely reading from the symbol plan and configuration to generate cross-references.

Mutation

No mutation is evident from the extracted code.

Usage Patterns

  • called in render_symbol_page to add documentation links

clore::generate::append_symbol_doc_pages

Declaration: generate/render/symbol.cppm:60

Declaration: Namespace clore::generate

Based solely on the declaration context, no further details on how the variable is read or participates in surrounding logic can be inferred.

Mutation

No mutation is evident from the extracted code.

clore::generate::append_type_member_sections

Declaration: generate/render/symbol.cppm:49

Declaration: Namespace clore::generate

Appears in the context of other generation-related variables, but its specific role and usage are not documented in the provided evidence.

Mutation

No mutation is evident from the extracted code.

Functions

clore::generate::build_page_doc_layout

Declaration: generate/render/symbol.cppm:37

Definition: generate/render/symbol.cppm:897

Declaration: Namespace clore::generate

函数 clore::generate::build_page_doc_layout 根据页面计划构建符号文档布局。流程起始于空 PageDocLayout,若 page_supports_symbol_subpages 返回 falsebase_dir 为空则直接返回默认布局。随后根据 plan.page_type 使用 collect_namespace_symbolscollect_implementation_symbols 收集页面相关符号,并按 is_type_kindis_variable_kindis_function_kind 分类到三个向量中。对每类符号分别调用 build_symbol_doc_plans 生成 SymbolDocPlan 列表并赋值给 layout 的对应字段(type_docsvariable_docsfunction_docs)。最后通过 for_each_symbol_doc_group 遍历所有计划组,对每个计划调用 register_symbol_doc_plan 完成注册。该函数依赖符号分类谓词、符号收集器、文档计划构建及注册函数,并在页面无子页面支持时提前返回。

Side Effects

No observable side effects are evident from the extracted code.

Reads From

  • plan
  • model
  • plan.relative_path
  • plan.page_type
  • plan.owner_keys
  • page_symbols

Writes To

  • layout
  • type_symbols
  • variable_symbols
  • function_symbols
  • layout.type_docs
  • layout.variable_docs
  • layout.function_docs

Usage Patterns

  • Called during page generation to build a layout of sub-document plans
  • Used to organize symbol documentation by kind

clore::generate::find_doc_index_path

Declaration: generate/render/symbol.cppm:40

Definition: generate/render/symbol.cppm:804

Declaration: Namespace clore::generate

该函数依赖 PageDocLayoutindex_paths 字段(一个以 std::string 为键的映射表),实现一个简单的查找操作。它将传入的 qualified_name 转换为 std::string 后在 index_paths 中进行查找,若存在则返回指向对应值的指针,否则返回空指针。内部控制流仅包含一次映射查找与条件分支,无额外循环或递归。此查找是构建符号文档页布局流程中的关键步骤,用于根据符号的限定名称快速定位其文档索引路径。

Side Effects

No observable side effects are evident from the extracted code.

Reads From

  • layout.index_paths

Usage Patterns

  • look up documentation index path by qualified name
  • get pointer to path or nullptr if not found

clore::generate::for_each_symbol_doc_group

Declaration: generate/render/symbol.cppm:27

Definition: generate/render/symbol.cppm:27

Declaration: Namespace clore::generate

该函数接收一个 const PageDocLayout & 和一个转发引用的 Visitor,并按顺序对布局中三个符号文档容器进行访问:首先访问 layout.type_docs,然后访问 layout.variable_docs,最后访问 layout.function_docs。每个容器代表一组按符号种类划分的文档条目;访问者被依次应用于每个组,从而允许调用方以统一的遍历模式处理类型文档、变量文档和函数文档。整个实现仅依赖 PageDocLayout 的这三个公开字段,没有分支或循环,是典型的顺序调度函数。

Side Effects

No observable side effects are evident from the extracted code.

Reads From

  • layout.type_docs
  • layout.variable_docs
  • layout.function_docs

Usage Patterns

  • Iterating over all symbol doc groups in a page layout to generate markdown sections

clore::generate::normalize_frontmatter_title

Declaration: generate/render/symbol.cppm:33

Definition: generate/render/symbol.cppm:885

Declaration: Namespace clore::generate

该函数首先调用 strip_inline_markdown 处理输入的 page_title,得到一个临时结果 plain。如果 plain 非空,则直接返回该值,这处理了标题中包含内联 Markdown 标记(如粗体、行内代码)时需要先还原纯文本内容的情况。

如果 strip_inline_markdown 返回空字符串(例如原始标题完全由 Markdown 语法构成或为空串),则回退到 trim_ascii 对原始 page_title 进行空白字符修整,并将结果转换为 std::string 返回。这种分阶段策略在多数情况下优先提取有意义的文本,仅在极端情况下才执行最小化的空白清理。

Side Effects

No observable side effects are evident from the extracted code.

Reads From

  • page_title (std::string_view)

Usage Patterns

  • Used to clean page titles extracted from frontmatter metadata
  • Likely invoked during page rendering in the generate module

clore::generate::page_supports_symbol_subpages

Declaration: generate/render/symbol.cppm:35

Definition: generate/render/symbol.cppm:893

Declaration: Namespace clore::generate

该函数检查传入的 plan 所对应的页面类型,如果 plan.page_type 等于 PageType::NamespacePageType::Module,则返回 true,否则返回 false。其控制流仅为一个布尔表达式,没有分支或循环。依赖项包括 PagePlan 类型及其 page_type 成员,以及 PageType 枚举中的两个特定值。

Side Effects

No observable side effects are evident from the extracted code.

Reads From

  • plan.page_type

Usage Patterns

  • Checking if a page can have subpages for symbols

Internal Structure

模块 generate:symbol 负责将符号信息渲染为文档页面。它导入 configextractgenerate:commongenerate:diagramgenerate:markdowngenerate:model 及标准库,依赖这些模块提供的配置、符号提取、通用渲染、图表、Markdown 输出和模型定义。内部按职责分为若干层:公共入口函数(如 append_symbol_doc_pagesbuild_page_doc_layout)向外提供页面生成能力;匿名命名空间中封装了页面渲染、子页面判定、前端元数据生成、代码片段与成员节区构造等辅助函数;数据结构 SymbolDocPlanPageDocLayout 用于描述符号文档计划和页面布局,通过 for_each_symbol_doc_group 迭代分组完成最终输出。这种分层使得页面生成流程清晰可追踪,各辅助函数可独立测试和维护。