自定义VSCode代码折叠扩展覆盖默认策略的实现方法及特定场景被覆盖的问题求助
自定义VSCode代码折叠扩展覆盖默认策略的实现方法及特定场景被覆盖的问题求助
大家好,我基于Python开发了一款针对特定框架的VSCode代码折叠插件,核心是实现分支逻辑代码的折叠功能。目前插件在大多数场景下都能正常工作,但遇到一种特定结构的代码时,我的自定义折叠策略会被VSCode的默认折叠策略覆盖,实在让人头疼。
先给大家展示这个特定框架的代码结构:
self.func1() \ .if_(condition1) .func2() \ .func3() \ .end_()
以下是我的代码折叠扩展核心实现:
class MyFoldingRangeProvider implements vscode.FoldingRangeProvider { public provideFoldingRanges(document: vscode.TextDocument, context: vscode.FoldingContext, token: vscode.CancellationToken): vscode.ProviderResult<vscode.FoldingRange[]> { const ranges: vscode.FoldingRange[] = []; let stack: number[] = []; const if_pattern = /(.*?)\.if_\((.*?)\)/; const end_pattern = /(.*?)\.end_(.*?)/; for (let i = 0; i < document.lineCount; i++) { const lineText = document.lineAt(i).text.trim(); // 匹配.if_()语句,记录起始行 if (if_pattern.test(lineText)) { stack.push(i); } // 匹配.end_()语句,弹出栈并生成折叠范围 else if (end_pattern.test(lineText)) { const startLine = stack.pop(); if (startLine !== undefined) { ranges.push(new vscode.FoldingRange(startLine, i, vscode.FoldingRangeKind.Region)); } } } return ranges; } }
问题就出在这种链式调用的分支代码上,VSCode的默认折叠逻辑似乎会优先识别这类结构,导致我的自定义折叠范围完全不生效。有没有大佬知道怎么提升自定义折叠策略的优先级,或者如何针对这类特定区域禁用默认折叠逻辑?麻烦给支个招,万分感谢!
备注:内容来源于stack exchange,提问作者Lele Lv
相关产品推荐
相关产品推荐

