代码之家  ›  专栏  ›  技术社区  ›  lacker

Emacs ActionScript 3参数列表中内联定义函数的缩进

  •  0
  • lacker  · 技术社区  · 15 年前

    我正在使用 actionscript-mode-connors.el 用于缩进Emacs中的ActionScript 3代码。

    我已经解决了大部分问题,但有一件事让我感到困扰,那就是当我使用一个内联闭包作为函数参数时,函数内部的缩进被搞得一团糟。

    例如:

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

    我希望返回qux()是前一行函数声明中的单个缩进,而不是打开paren中的单个缩进。“酒吧”的凹痕过去也被弄乱了,但我用

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

    通常在这里,我会使用C-C C-S来计算我需要更改的语法符号,但是“return qux()”行的问题是语法上下文是

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

    其中,这些数字指的是“某些函数”行。“arglist cont nonempty”似乎是一个错误,而且它似乎应该是“arglist cont”,因为在这行中,open paren后面没有任何内容。我不能更改“arglist cont nonempty”的缩进,因为这会影响open paren不结束“some_function”行的情况。

    我怎么修这个?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community Lee    7 年前

    间接回答怎么样?似乎你对C压痕机比较满意。你可能想利用周围的建议 'c-guess-basic-syntax 识别特定的配置并将其修改为您认为对这种情况最有意义的配置。

    如果你看看这个答案 indentation customization for comments 我做了同样的事情,只是在压痕处。

    关于您的具体情况,我无法重现您的失败,我对这段代码的缩进(在 '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-语法 似乎这是一个可行的解决方案。

    我也能指出明显的测试吗?您是否在没有任何自定义的情况下开始,并且只加载操作脚本?我用最新的动作脚本和Emacs23.1做了这些,得到了上面看到的结果。使用测试 M-x c-version 显示两者 5.31.3 5.31.7 (后者与emacs 32.1一起分发)。

        2
  •  2
  •   jrockway    15 年前

    我会用 espresso-mode 对于actionscript。它正确地缩进您的示例。