【发布时间】:2019-11-26 14:11:33
【问题描述】:
我正在为 SAS for VScode 开发语言扩展。我之前曾为 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 中的块通常以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 更复杂的规则,因为它们并不总是相互配对。通过比较当前行上方最接近的run 和data,我能够在Vim 中实现这一点。如果run 比之前的data 行更接近当前data 行,则不需要缩进。否则,缩进当前的data 行。我想知道在 VScode 中实现它有多可行(可能不依赖indentationRules 设置,而是使用vscode.languages.* API?)我需要一些指导。
【问题讨论】:
-
尽管 SAS 允许 DATA / PROC 步骤在没有运行/退出的情况下结束,但通常认为使用此功能是一种糟糕的编码风格。如果我正在开发一个语言扩展,我可以编写一个期望每个步骤都被明确关闭的扩展。
标签: visual-studio-code sas indentation vscode-extensions