0

我正在使用actionscript-mode-connors.el在 emacs 中缩进 Actionscript 3 代码。

我已经弄清楚了大部分事情,但困扰我的一件事是当我使用内联闭包作为函数参数时,函数内部的缩进被搞砸了。

例如:

var foo:int = some_function(
  bar,
  baz,
  function():void {
                              return qux();
                            },
  zap);

我希望 return qux() 成为前一行函数声明的单个缩进,而不是打开括号的单个缩进。“bar”的缩进过去也被搞砸了,但我用

(add-hook 'actionscript-mode-hook
      (lambda ()
        (c-set-offset 'arglist-intro '+)
        (c-set-offset 'arglist-close 0)))

通常在这里我会使用 Cc Cs 来确定我需要更改哪些语法符号,但是“return qux()”行上的问题是语法上下文是

((arglist-cont-nonempty 731 758) (brace-list-intro 731))

这些数字指的是“some_function”行。'arglist-cont-nonempty' 似乎是一个错误,它似乎应该是 'arglist-cont',因为在该行的 open paren 之后没有任何内容。我无法更改 'arglist-cont-nonempty' 的缩进,因为这会影响 open paren 也不会结束 'some_function' 行的情况。

我怎样才能解决这个问题?

4

2 回答 2

2

我会为 ActionScript 使用espresso-mode。它正确缩进了您的示例。

于 2009-10-01T21:00:05.130 回答
1

间接回答呢?似乎您对 C 压痕机比较满意。您可能希望使用建议'c-guess-basic-syntax来识别特定配置并将其修改为您认为最适合该情况的配置。

如果您查看此答案以获取评论的缩进自定义,我基本上做了同样的事情,只是在缩进点。

关于你的细节,我无法重现你遇到的同样的失败,我对那段代码的缩进(在'actionscript-mode你的两个更改中)看起来像:

var foo:int = some_function(
  bar,
  baz,
  function():void {
    return qux();
  },
  zap);

此外,该return qux();行的语法是:((brace-list-intro 319)).

看来您的预感是正确的(arglist-cont-nonempty列表是问题所在),并且更改输出'c-guess-basic-syntax似乎是一个可行的解决方案。

我还可以指出明显的测试吗?您是否开始没有任何自定义并仅加载动作脚本?我使用最新的 action-script 和 Emacs 23.1 这样做,并得到了您在上面看到的结果。测试M-x c-version显示两者5.31.35.31.7(后者随 Emacs 32.1 分发)。

于 2009-10-01T20:27:26.927 回答