【发布时间】:2018-02-05 04:14:52
【问题描述】:
我在我的 Atom 配置的 init.coffee 文件中编写了这个函数来自动缩进整个文件:
atom.commands.add 'body', 'custom:auto-format', ->
editor = atom.workspace.getActiveTextEditor();
oldSelection = editor.getSelectedBufferRanges();
editor.selectAll();
editor.autoIndentSelectedRows();
editor.setSelectedBufferRanges(oldSelection);
对于除 Python 之外的所有语言,它都能完美运行!我对结果非常满意。但是,CoffeeScript 自动缩进完全与 Phyton 代码混淆。
它需要这个文件:
import sys
def factorial (n):
if n == 1:
return 1
else:
return n * factorial(n-1)
if __name__ == "__main__":
for arg in sys.argv[1:]:
n = factorial(int(arg))
print("The factorial of " + arg + " is " + str(n))
并且无法识别阶乘函数的结束位置,因此缩进如下:
import sys
def factorial (n):
if n == 1:
return 1
else:
return n * factorial(n-1)
if __name__ == "__main__":
for arg in sys.argv[1:]:
n = factorial(int(arg))
print("The factorial of " + arg + " is " + str(n))
如果有人对如何解决这个问题有任何见解,将不胜感激!
【问题讨论】:
-
您不能自动缩进 Python 代码。两种缩进变体都是完全合法的 Python 代码;只有作为程序员的你知道为什么其中一个是错误的。
-
@MartijnPieters 后缩进 python 代码显然不是预期的结果。 main 不应与阶乘函数的 else 情况同样缩进。编辑:我看到我的逻辑错误。 main 仍然是一个 if 语句
-
假设那一行不是“
if __name__..”,而是“if foo:”?自动压头如何知道它应该去哪里? -
@NedBatchelder 哦 - 我明白你们在说什么。我的错!是的,我想我还在考虑其他语言的主要方法。从技术上讲,它仍然是一个 if 语句
-
我已回滚您的编辑;这个问题在更改之前实际上更有意义,我在回答中引用了
__name__测试。
标签: python coffeescript indentation atom-editor