registerFoldingRangeProvider冲突:扩展在开发环境正常,生产VSIX失效
VSCode CSS折叠扩展生产环境异常问题
我在VSCode中遇到一个问题:带嵌套选择器的CSS文件里,默认折叠范围标记完全不合理。例如:
/*----- Content -----*/ #blog-content { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; order: 1; flex: 1 1 auto; width: 100%; max-width: clamp(320px, 90vw, 1200px); /* Context Navigation Breadcrumbs */ #blog-context-nav { margin-bottom: 1rem; ol { list-style: none; margin: 0; padding: 0; display: flex; gap: 1rem; flex-wrap: nowrap;
默认VSCode会标记flex: 1 1 auto;为可折叠,#blog-context-nav {不可折叠,list-style: none;却可折叠。于是我开发了一款能正确处理的VSCode扩展,扩展ID为jcall-engineer.fold-css。
发布1.0.0版本前,通过Extension Development Host本地运行效果完美,但发布安装VSIX后,生产环境折叠范围不正确,开发环境却正常。我一直用这个特定CSS文件测试,因为它的默认折叠问题尤为严重。
我添加了控制台输出,确认扩展已被调用,但返回的范围与编辑器左侧行号旁显示的折叠标记位置不符。
我尝试了以下排查手段:
- 在settings.json中设置强制使用我的扩展:
"[css]": { "editor.defaultFoldingRangeProvider": "jcall-engineer.fold-css" }, "[scss]": { "editor.defaultFoldingRangeProvider": "jcall-engineer.fold-css" }, "[sass]": { "editor.defaultFoldingRangeProvider": "jcall-engineer.fold-css" }, - 通过GUI修改相同设置
- 禁用所有
@builtin css插件(怀疑vscode.css-language-features覆盖了返回的FoldingRange) - 尝试移除contributes中的languages配置(虽觉不合理仍尝试),结果导致扩展无法加载:
"languages": [ { "id": "css", "aliases": ["CSS"], "extensions": [".css", ".scss", ".sass"] } ]
根据API文档,我的扩展本不应依赖此配置,但移除后完全无法加载,这让我困惑。
目前我的疑问:
- 是否存在未文档化的API特性?
- 是否错误使用了
registerFoldingRangeProviderAPI? - 是否需要向microsoft/vscode GitHub提交Bug报告?
进一步排查发现:160行的小型CSS文件中折叠标记显示正常,但无法确认VSCode使用的是我的扩展还是其他FoldingRangeProvider,仅能确认我的扩展被调用且返回值正确。我尝试创建最小复现CSS文件但未成功,问题出在660行的完整CSS文件中,截图显示折叠区域出现在错误行号,控制台输出的返回范围与显示位置不符。
内容的提问来源于stack exchange,提问作者JCall-Engineer
相关产品推荐
相关产品推荐

