有没有办法可以clang-format在报告文件是否符合指定格式的模式下运行?一种干运行模式,它报告是否需要更改,但不进行更改.理想情况下,如果文件需要更改,我希望clang-format只返回非零退出代码.或者,更理想的是,非零退出代码和需要在标准输出上进行更改的文件列表.
我试图将问题保持通用,以便更多人可以回答,但我想要做的是编写一个git pre-commit钩子,它将拒绝任何与预期的.clang格式不匹配的提交.在索引中的文件列表上运行clang-format很容易.但是很难知道clang格式是否真的改变了什么.
我有一个潜在的解决方案-output-replacements-xml(我将作为答案发布),但它是一个黑客,我觉得这应该更直接.欢迎提出意见/建议,编辑,不同的答案/方法.
有没有办法在cpp项目文件夹上调用类似"clang-format --style = Webkit"的东西,而不是在每个代码中单独运行它?
我正在使用clang-format.py和vim来执行此操作.但我认为有一种更简单的方法可以应用这一次.
是否有一个clang-format选项可以为所有if()/ do/while语句等添加大括号?
例如
if( i == 42 )
std::cout << "You found the meaning of life\n";
else
std::cout << "Wrong!\n";
Run Code Online (Sandbox Code Playgroud)
至
if( i == 42 )
{
std::cout << "You found the meaning of life\n";
}
else
{
std::cout << "Wrong!\n";
}
Run Code Online (Sandbox Code Playgroud)
运用
$ clang-format --version
clang-format version 3.6.0
Run Code Online (Sandbox Code Playgroud) 今天我更新到Xcode 6.3.2并且我无法运行Clang代码格式化 - 似乎它甚至没有安装.每次我更新Xcode,我都必须重新安装恶意软件和大多数软件包(为什么顺便说一句?),使它们可以在新版本的Xcode上运行.
这次我重新安装了所有软件包(如VVD文件管理器,颜色选择器等),但ClangFormat不起作用 - 它甚至没有出现在"编辑"菜单中.知道为什么吗?
顺便说一句.我试图重启Xcode以及Mac本身:)
编辑(解决方案):
Xcode 6.3.x的解决方案(如果这不起作用,请使用下面的常规解决方案.)
在终端中,输入以下内容:
find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add 9F75337B-21B4-4ADC-B558-F9CADF7073A7
Run Code Online (Sandbox Code Playgroud)
一般解决方案
通过终端获取新的UUID:
defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
Run Code Online (Sandbox Code Playgroud)
将新的UUID添加到插件中的DVTPlugInCompatibilityUUIDs键(您的xcplugin文件 - > show package contents - > Contents/Info.plist
我正在寻找一个clang-format设置来防止该工具删除换行符.
例如,我将我的ColumnLimit设置设置为120,这是我重新格式化一些示例代码时会发生的情况.
之前:
#include <vector>
#include <string>
std::vector<std::string> get_vec()
{
return std::vector<std::string> {
"this is a test",
"some of the lines are longer",
"than other, but I would like",
"to keep them on separate lines"
};
}
int main()
{
auto vec = get_vec();
}
Run Code Online (Sandbox Code Playgroud)
后:
#include <vector>
#include <string>
std::vector<std::string> get_vec()
{
return std::vector<std::string>{"this is a test", "some of the lines are longer", "than other, but I would like",
"to keep them on separate lines"}; …Run Code Online (Sandbox Code Playgroud) 我想在CLion中使用clang-format格式化我的代码.我已经完成了设置并且没有找到任何允许我运行外部命令来转换代码的设置.如何在CLion中完成这些事情?
我很难在Mac OS 10.8.5上使用Xcode 5及其命令行工具找到clang-format和clang-format.py.我没试过就试过了find / -name "clang-format.py".他们已经在这里隐藏了什么,或者我如何获得这个工具链?
(我很惊讶它似乎并不容易获得,因为clang是Apple的编译器---因为Apple使用它.)
该铛格式sytle选项文件包括一些所谓的PenaltyXXX选项.该文件没有解释应如何使用这些处罚.你能描述一下如何使用这些惩罚值及其实现的效果(可能还有一个例子)?
是否可以在列中使用clang-format对齐变量赋值?例如:
int someInteger = 42;
std::string someString = "string";
const unsigned someUnsigned = 42;
#define SOME_INTEGER 42
#define SOME_STRING_LITERAL "string"
#define SOME_CONSTANT 42
enum Enum {
ONE = 1,
TWO = 2,
THREE = 3,
FOUR = 4,
FIVE = 5,
SIX = 6,
SEVEN = 7
};
Run Code Online (Sandbox Code Playgroud)
比以下更具可读性:
int someInteger = 42;
const unsigned someUnsigned = 42;
std::string someString = "string";
#define SOME_INTEGER 42
#define SOME_STRING_LITERAL "string"
#define SOME_CONSTANT 42
enum Enum {
ONE = 1,
TWO = 2, …Run Code Online (Sandbox Code Playgroud) 作为clang-format仅重新格式化代码的工具,这种格式化是否有可能破坏工作代码或至少改变它的工作方式?是否存在某种合同,它将/不能改变代码的工作方式?
我们有很多代码需要格式化clang-format.这意味着,许多代码行都会改变.不必审查由于a而仅更改的每一行代码clang-format都将是此过程的一个大的简化.
我会说这clang-format不会改变代码的工作方式.另一方面,如果可以保证,我不是百分百肯定.