【问题标题】:Emacs Actionscript 3 indentation for functions defined inline in an arglistarglist 中内联定义的函数的 Emacs Actionscript 3 缩进
【发布时间】:2009-10-01 19:43:15
【问题描述】:

我正在使用 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)))

通常在这里我会使用 C-c C-s 来确定我需要更改哪些语法符号,但 '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' 行的情况。

我该如何解决这个问题?

【问题讨论】:

    标签: actionscript-3 emacs closures indentation


    【解决方案1】:

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

    【讨论】:

    • 浓缩咖啡模式确实可以正确缩进。但是,它并没有做太多的语法突出显示,例如成员函数声明。
    【解决方案2】:

    间接回答怎么样?似乎您对 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-syntax 的输出似乎是一个可行的解决方案。

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

    【讨论】:

    • 我已经尝试过了,没有进行任何自定义。但也许我应该使用更好的动作脚本模式。您使用的是哪个 actionscript-mode.el?似乎有很多浮动,到目前为止我已经尝试了几个,但都不是很好。
    • 我使用了你在问题中提供的那个(我根本不知道 actionscript-3)。
    • 可能是c-mode不同。
    • @jrockway 我也不懂 JavaScript。 :( 伙计,我必须张开翅膀......
    • actionscript != javascript,不幸的是。 actionscript 有实际的类、继承、静态类型和其他各种东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多