你可以自定义代码折叠吗?

时间:2016-04-24 15:18:34

标签: visual-studio-code vscode-extensions

是否可以自定义代码折叠在Visual Studio Code中的工作方式?

我使用一种在各种不同文档类型中定义代码区域的通用模式。

  • 因此,对于XML,我使用<!-- #region --><!-- #endregion -->

  • 包装文本部分
  • 对于c#,我使用#region#endregion

  • 对于TypeScript / Javascript,我使用/* #region *//* #endregion */

在完整的Visual Studio(不是VS Code)中,我有一个自定义扩展,可以跨文档类型窥探模式,并根据它创建折叠,允许我创建整洁的自定义文档大纲。我想在Visual Studio Code中使用相同的模式。是否可以创建一个自定义VS代码扩展来检测这些注释模式,并以某种方式根据模式标记折叠?

3 个答案:

答案 0 :(得分:8)

如果您希望在扩展程序中提供自定义折叠逻辑,则可以使用

FoldingRangeProvider

请务必在engines中的package.json中将您的VS代码版本设置为引入此版本的1.23版本。

以下是你如何使用它。

export function activate(context: ExtensionContext) {
    languages.registerFoldingRangeProvider({ scheme: 'file', language: 'markdown' }, new MyFoldingRangeProvider());
}

class MyFoldingRangeProvider implements FoldingRangeProvider {
    provideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken): FoldingRange[] {
        return detectRanges().map(({ lineStart, lineEnd }) => new FoldingRange(lineStart, lineEnd));
    }
}

答案 1 :(得分:2)

不幸的是,现在还没有。这个主题有一个open issue in github

答案 2 :(得分:0)

现在,有三种方法可以在VSCode扩展中实现自定义折叠。

  1. 可以在[language-name] .configuration.json文件中将正则表达式定义为折叠标记。 (但是,使用这种方法我们不能进行太多定制)

name = [["one","two","three"]]

  1. 可以如本answer中所述从扩展端定义 FoldingRangeProvider vscode 软件包中的FoldingRange支持使用startLine,endLine和foldingKind进行折叠自定义。

  2. 可以将Language Server支持与 textDocument / foldingRange 一起使用。 vscode-languageserver-protocol 中的FoldingRange支持使用startLine,endLine,startCharacter,endCharacter和foldingKind进行折叠自定义。

检查this以获得更多详细信息。