【问题标题】:Java Coding Style & Emacs cc-mode configurationJava 编码风格和 Emacs cc-mode 配置
【发布时间】:2024-07-14 00:05:01
【问题描述】:

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

我正在尝试定义自定义样式来管理Code Conventions for the Java Programming LanguageAndroid's Code Style Guidelines for Contributors 和一些自定义规则。

作为 lisp 初学者,从头开始似乎并不明智。因此,我使用google-c-style 作为起点,并设法获得了大多数缩进规则的预期行为,嵌套条件例外(参见下面的代码 sn-p)。

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

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 在第二行报告Syntactic analysis: ((arglist-cont-nonempty 2447 2450) (arglist-cont-nonempty 2447 2452)),我显然有16个空格(2倍++)缩进而不是8( ++)。

我想得到以下缩进:

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

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

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

(我不想使用 malabar-mode 或 JDEE,所以请不要告诉我使用它们。)

干杯,

雷诺

2011/12/06 更新(对 cme​​ts 作出反应)

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

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

我坚持使用 Emacs……

【问题讨论】:

  • 我会使用专门设计用于开发、调试和测试 Java 应用程序的 IDE。它不像 emacs 那样通用,但可能更好地支持 Java 特定的功能。
  • @PeterLawrey 这里的问题不是我是否应该/将/可以使用 Eclipse 或其他成熟的 java 感知 IDE,而是如何在 emacs 中解决一个非常具体的缩进问题......无论如何,谢谢你评论!
  • 当然是评论,而不是您的问题的答案。 ;)
  • @PeterLawrey Emacs 几十年来一直允许在 C 中自定义缩进,并且鉴于 Java 和 C 对 if 条件的语法完全相同(这就是问题所在,对吧?),并且我看不出其他 IDE 应该如何在这里做得更好。
  • @Antoine,Java IDE 无济于事,但好的 lisp IDE 可能。

标签: java emacs elisp dot-emacs cc-mode


【解决方案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();
}

【讨论】: