Snow-IntelliJ v1.2.0 发布:文档注释、结构视图与缩进格式化增强
版本更新
重构与优化
文档注释与格式化体系重构
- 统一行注释
//与块注释/* ... */的前缀定义,修正原先误用/**作为普通块注释的配置,清晰区分普通块注释与文档注释。 - 将文档注释处理链路从
preFormatProcessor迁移到PostFormatProcessor,新增SnowDocCommentPostFormatter,在格式化完成后统一规范/** ... */文档注释的缩进与星号对齐。 - 使用
CodeStyleManager精确计算 Doc 注释行的目标缩进;在源代码未缩进或缩进混乱时,自动对齐首行/**与内部*行,保证注释块内外缩进风格一致。 - 在文档注释格式化前后显式同步
Document与 PSI,修复模型不同步导致的异常、光标跳动或格式丢失问题,显著提升格式化稳定性。
基于官方编译器的缩进与分词逻辑优化
- 引入
BlockKind枚举与SnowAstIndentCalculator,通过官方SnowCompilerFacadeAST 计算缩进层级,使缩进结果与编译器语义保持一致。 - 设计
SnowIndentSnapshot缓存行缩进信息并映射到 AST 节点,SnowBlock从快照中读取缩进,实现 ASTBlock 缩进与间距控制逻辑的集中管理。 - 抽离
SpacingRulesBuilder,统一运算符、关键字与标点的空格/换行规则,并针对一元运算符+/-细化特殊空格处理,避免误将一元符号当作二元运算符格式化。 - 优化词法分析器增量分词逻辑:调整
start方法,仅保留startOffset之后的 tokens,并通过trimTokensBefore丢弃起点之前的 token、截断跨越起点的首个 token,避免SegmentArray出现负偏移以及旧 token 导致的左移问题;同时结合全量 buffer 重分词策略,兼顾增量性能与分词正确性。
结构视图与段落解析稳定性提升
- 重构
SnowStructureViewElement,完善文件、模块、结构体与函数之间的层次关系,移除对缩进的依赖,改为使用 token 流与 AST 信息确定节点归属。 - 引入结构体内部函数的收集与分组逻辑,防止函数既出现在顶层又出现在结构体内部,统一只将函数节点作为叶子节点展示,提升结构树的语义一致性。
- 通过
SnowCompilerCache解析 token 流,并以 PSI 树搜索作为 fallback,在复杂嵌套、不完整代码等场景下仍能稳定构建结构视图;新增辅助方法计算缩进与行号,用于更精确地识别函数体内参数和返回值。 - 调整段落/Section 判断逻辑,新增
nextKeywordPopsSection与commentBeforeContainerKeyword条件,正确处理「注释前置容器关键字」场景下的段落层级变化,确保嵌套段落与结构结束标记的匹配关系。
配置与文件类型定义修正
- 规范插件中
fileType的名称与本地化 key 配置,修复Snow File与file.type.name之间的不一致问题,确保 Snow 文件在 IDE 中以预期名称展示,并与语言和注释器实现类正确绑定。 - 清理结构视图相关模块中的无用导入,修正 TokenType 命名冲突与类型引用问题,进一步提升代码整洁度与可维护性。
新增功能
Snow 文档注释(Doc Comment)完整支持
- 新增
SnowDocCommentPreFormatter,配合SnowDocCommentPostFormatter在格式化前后统一文档注释风格,自动修正注释首行与内部星号的缩进与对齐。 SnowCommenter实现CodeDocumentationAwareCommenter,支持 IDE 级文档注释识别,提供文档注释前缀与类型判断能力,并完善行注释、块注释、文档注释的快捷键操作体验。- 增强
SnowCompilerLexerAdapter,支持识别DOC_COMMENTtoken;SnowTokenTypes新增DOC_COMMENT标记,并在ParserDefinition、FindUsagesProvider等组件中统一接入该类型,保证文档注释在解析与查找中的一等公民地位。 - 在语法高亮中将
DOC_COMMENT与BLOCK_COMMENT使用同一套高亮方案,并扩展SnowDocumentationProvider以同时支持从DOC_COMMENT与BLOCK_COMMENT提取文档内容,优化文档提示与悬浮说明体验。
Snow 语言结构视图能力增强
- 在
plugin.xml中注册SnowStructureViewFactory,构建 Snow 语言专用结构视图体系,支持模块、结构体与函数声明的结构化展示。 - 实现
SnowStructureViewModel与SnowStructureViewElement,支持按模块和顶层分别展示声明,并按名称字母排序与去重,确保结构树层次清晰、无重复节点。 - 为函数节点添加专用图标,对以下划线开头的函数使用「锁」图标区分内部/受限函数类型,方便在大型项目中快速视觉定位。
- 展示函数签名信息,包括参数与返回值类型,支持多行解析,提升在结构视图中阅读与跳转到目标函数时的上下文理解能力。
- 引入结构体内函数的映射与过滤逻辑,通过词法分析与偏移映射精确关联函数与所属结构体,避免结构体函数在顶层列表重复显示。
Snow 语言代码风格设置支持
- 在
plugin.xml注册SnowCodeStyleSettingsProvider,为 Snow 语言提供独立的代码风格设置页面,与 IDE 其他语言的 Code Style 体验保持一致。 - 默认设置缩进为 4 个空格并禁用 Tab 字符,使 IDE 中新建与格式化后的代码与官方推荐风格保持统一。
- 提供 Snow 代码示例用于风格预览与测试,便于开发者快速验证缩进、空格与换行等规则是否符合预期。
依赖升级
Snow 依赖升级至 0.13.2
- 将集中管理的
snowVersion从0.13.1升级至0.13.2,同步更新snow-lang相关依赖(如 common、parser、semantic、ir、backend、vm、lexer 等),与最新官方编译器版本保持一致。 - 依赖升级后,缩进计算、分词与语义分析逻辑与编译器侧行为进一步对齐,为文档注释格式化、结构视图构建等功能提供更加可靠的语义基础。
工具链与构建环境
- 本次迭代仅升级 Snow 语言相关依赖,Kotlin、IntelliJ 平台插件版本以及 Gradle 构建配置与上一版本保持不变,确保构建环境稳定、升级影响可控。
如遇到使用问题,欢迎及时 提交 Issue