Java Coding Style & Emacs cc-mode configuration

2022-09-02 14:09:19

我在 GNU/Linux Debian 机器上使用 GNU/Emacs HEAD 和包含 cc 模式(c 版本 5.32.2)。

我正在尝试定义一种自定义样式来管理 Java 编程语言的代码约定Android 的贡献者代码样式指南和一些自定义规则。

作为lisp初学者,从头开始似乎并不明智。因此,我使用google-c样式作为起点,并设法获得了缩进量最大的规则的预期行为,但在嵌套条件下有一个例外(请参阅下面的代码片段)。

那篇文章中,我用我的自定义样式进行了定义(完整代码:custom-java-style.el)。不幸的是,尽管大多数情况都按预期缩进:(arglist-cont-nonempty . ++)

if ((condition1 && condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();

    someMethod(longExpression1, longExpression2, longExpression3,
            longExpression4, longExpression5);
}

嵌套条件被错误地缩进:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
                && deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
    doSomethingAboutIt();
}

Ctrl-c Ctrl+s报告在第二行,我显然有16个空格(2次)缩进而不是8()。Syntactic analysis: ((arglist-cont-nonempty 2447 2450) (arglist-cont-nonempty 2447 2452))++++

我想得到以下缩进:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
        && deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
    doSomethingAboutIt();
}

我试图定义一个类似于用于的条件,但没有成功(我缺乏lisp知识也无济于事)。(,(when (fboundp …)))statement-cont

现在的问题是:我的方法是对的还是错的?我如何/应该实现预期的行为(即检测我何时处于嵌套状态以获得正确的缩进)?

(我不想使用马拉巴尔模式或JDEE,所以请不要告诉我使用它们。

干杯

雷诺

更新 2011/12/06 (对评论做出反应)

我们不会在这里开始一场圣战。那些想使用Emacs的人,出于自己的原因,可以坚持使用Emacs,其他人会随心所欲......

话虽如此,我在一个团队中工作,在这个团队中,我是唯一一个使用Emacs的人,其他人都喜欢Eclipse。由于我负责编码规则,因此我与同事一起获得了正确的保存操作,并帮助配置了 Eclipse 的格式化程序。我只能说:Eclipse保存操作和格式化程序根本不容易配置......主要区别在于你有一个很好的GUI和漂亮的复选框,但它对降低复杂性没有多大帮助。

我坚持使用Emacs...


答案 1

我会说,Emacs做了正确的事情。请考虑以下情况:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
                && deviceRegistred.getName().equalsIgnoreCase(deviceName))
        || otherCondition) {
    doSomethingAboutIt();
}

如果嵌套条件缩进 8 个字符,那将是一个令人困惑的变体:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
        && deviceRegistred.getName().equalsIgnoreCase(deviceName))
        || otherCondition) {
    doSomethingAboutIt();
}

答案 2

推荐