EclipseC ++格式化程序在方法标识符之前放置新行

2guxujil  于 2023-03-29  发布在  Eclipse
关注(0)|答案(4)|浏览(110)

我遇到了一个Eclipse格式化程序的问题。当在类声明中声明方法时,它不能正确地格式化我的代码。它在方法的返回类型后面放了一个新行。
我已经导出了样式xml文件并检查了其中的设置,但是没有一个设置与这个问题有任何明显的联系,Eclipse中的设置编辑器没有显示在方法声明的示例代码中发生的相同问题。
下面是一段代码的例子,我想让它发生:

class MyClass
{
    public:
        MyClass();
        void myMethod();
};

然而,这就是我得到的:

class MyClass
{
    public:
        MyClass();
        void
        myMethod();
};

同样,在样式编辑器中,代码没有这个问题,看起来就像我想要的那样,但在实际代码中,情况有所不同。
我使用的是3.8.0版本。任何帮助都很感激。
编辑:我删除了那些格式不正确的源文件(在格式化代码几次都没有用之后),并用具有相同方法,相同结构等的“相同”文件替换它们。这次我格式化了代码,它工作了。这可能是一个错误,但我把它留了下来,以防其他人遇到类似的问题,或者有一个解决方案来避免这个问题。

camsedfj

camsedfj1#

我手工编辑了主Eclipse项目目录下的两个文件

.metadata\.plugins\org.eclipse.core.runtime\.settings

这两个文件:

file 1: org.eclipse.cdt.core.prefs, change this line from "insert" to "do not insert"
 org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert

file 2: org.eclipse.cdt.ui.prefs,
scan this file for "insert_new_line_before_identifier_in_function_declaration" and make a similar change from insert to do not insert next to it, should be obvious

注意我在靛蓝和juno上看到了这个问题,上面描述的修复是在juno上。

sycxhyv7

sycxhyv72#

如果你有一个自定义的格式化程序配置,首先导出它(设置〉C/C++常规〉格式化程序〉编辑〉导出)。然后将下面的行更改为“不插入”。保存XML。

<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration" value="do not insert"/>

删除当前配置并导入您更改的配置。

vc6uscn9

vc6uscn93#

从Eclipse 2019-06中包含的cdt 9.8开始,格式化程序选项中有一个特定的首选项。

bf1o4zei

bf1o4zei4#

其他人已经充分解释了如何解决这个问题,但这留下了一个问题,为什么默认情况下插入换行符。
在函数名前换行是C语言中一个非常悠久的传统,一些常用的工具依赖于它。
例如,vi及其衍生版本都有一个键盘快捷键ctrl+],用于“跳转到定义”,它使用了一个外部交叉引用列表,该列表由ctags程序生成,而ctags的许多版本都依赖于位于左边距的C函数名。
事后看来,在处理C++时,这应该从一开始就被禁用,因为有太多的方面不同。
特别是,在类内部的方法名之前的换行符用处不大,因为它们是缩进的,不会被ctags和其他工具识别。更糟糕的是,在不是定义的声明上的换行符完全没用,因为它们分散了查找实际定义的注意力。

相关问题