我正在为VScode开发SAS语言扩展。之前,我曾经为Atom(https://github.com/akanosora/language-sas)和Vim(作为默认Vim包的一部分:https://github.com/vim/vim/blob/master/runtime/indent/sas.vim)开发了SAS语言扩展。
我对Atom中的自动缩进实现不太满意,而VScode提供了更或多或少相同的自动缩进机制。
对于SAS代码来说,正确的缩进非常棘手,因为块的结尾并不总是必需的。在SAS中,一个块通常以
所以,适用于SAS的正确自动缩进需要比
我对Atom中的自动缩进实现不太满意,而VScode提供了更或多或少相同的自动缩进机制。
对于SAS代码来说,正确的缩进非常棘手,因为块的结尾并不总是必需的。在SAS中,一个块通常以
data
或proc
开始,并以run
或quit
结束,您可以跳过run
来关闭它。例如,以下代码在SAS中都可以使用:data female;
set total;
where gender = 0;
run;
data male;
set total;
where gender = 1;
run;
或者
data female;
set total;
where gender = 0;
data male;
set total;
where gender = 1;
run;
所以,适用于SAS的正确自动缩进需要比
increaseIndentPattern
和decreaseIndentPattern
更复杂的规则,因为它们并不总是相互匹配。在Vim中,我通过比较当前行上方最接近的run
和data
来实现这一点。如果run
比前一个data
更靠近当前data
行,则不需要缩进。否则,缩进当前data
行。我想知道在VScode中实现这个功能有多可行(也许不依赖于indentationRules
设置,而是使用vscode.languages.*
API?)我需要一些指导。