OI-wiki / feedback-sys

OI Wiki 划词评论反馈系统
https://oi-wiki.org/#comment-16
Apache License 2.0
11 stars 3 forks source link

Pas 转 cpp 页面 box 之后没有评论按钮了 #21

Closed ksyx closed 3 months ago

ksyx commented 3 months ago

image

Enter-tainer commented 3 months ago

感觉是offset计算出了点问题,这个页面上很多部分都没有成功注入offset

shaokeyibb commented 3 months ago

感觉是offset计算出了点问题,这个页面上很多部分都没有成功注入offset

是,这个感觉目前还没有什么好的改进方案

Enter-tainer commented 3 months ago

maybe可以对于这个case针对性地锤一下。我预期页面里面应该90%的元素是可以评论的。这个页面里面绝大部分都评论不了,是一个比较alerting的信号

shaokeyibb commented 3 months ago

maybe可以对于这个case针对性地锤一下。我预期页面里面应该90%的元素是可以评论的。这个页面里面绝大部分都评论不了,是一个比较alerting的信号

好,这个我重点关注下

shaokeyibb commented 3 months ago

ksyx 你好,感谢你的反馈!现已查明这是由于 offset 计算插件的一个缺陷导致的问题:

该插件会维护一个 last_processed_line_idx 字段,用于标明当前块处理器已处理到的原文件行数,这是为了避免块被重复消费而引入的;在后续版本中,引入了一个 parseBlocks 流程,该流程用于预渲染指定块,以确认该块是否是一个单独的块(还是后续有其他块也属于该块)。此 parseBlocks 函数会递归调用本插件的块处理器,但由于 last_processed_line_idx 在该函数调用之前已更新,因此此函数预期在本插件的块处理器中直接被跳过,而不会有任何效果。

然而在 lang/pas-cpp 页面中,当处理到 - [附 A:Pascal 与 C++ 运算符与数学函数语法对比表](#附-apascal-与-c-运算符与数学函数语法对比表-pascal-vs-c-operator-syntax-table)原文件第 17 行)时,该处理器错误的选取了内容完全相同但位于原文件第 222 行的内容,并据此更新了 last_processed_line_idx,由此导致此两行之间的所有块未被正常解析。

目前引入了 is_in_prerender 标志,当进入预渲染流程时,直接跳过本块处理器,问题已经得到解决。目前尚未观察到由此产生的其他问题,如果有相关问题,请随时提出新的 issue,谢谢。