如何在Xcode 8中获取Clang格式化工具?

5

在将Xcode更新至8版本之后,非常实用的Alcatraz插件管理器被锁定,像clang-format、高亮选定的单词出现次数或使用快捷键调整字体大小等超级工具都消失了。

我该如何重新启用clang-format来在保存时使用任何源文件的父目录中的模板.clang-format格式化我的当前源代码文件?

5个回答

5
您可以创建一个shell脚本,并将其作为行为添加到Xcode 8中:Xcode>行为>+(以创建新的行为)>运行脚本:(在此处选择文件),添加快捷方式,如Cmd+Shift+S。

该脚本要求Xcode保存当前文档。然后提取它的文件路径并调用clang-format以就地格式化该文件。可以使用包管理器(例如 brew )下载Clang-format,并发布其路径以进行命令行访问。通常,由clang-format使用的样式指南必须具有名称 .clang-format ,并且必须位于源文件的任何父文件夹中。

以下是脚本:

#!/bin/bash

CDP=$(osascript -e '
tell application "Xcode"
    activate
    tell application "System Events" to keystroke "s" using {command down}
    --wait for Xcode to remove edited flag from filename
    delay 0.3
    set last_word_in_main_window to (word -1 of (get name of window 1))
    set current_document to document 1 whose name ends with last_word_in_main_window
    set current_document_path to path of current_document
    --CDP is assigned last set value: current_document_path
end tell ')

LOGPATH=$(dirname "$0")
LOGNAME=formatWithClangLog.txt
echo "Filepath: ${CDP}" > ${LOGPATH}/${LOGNAME}
sleep 0.6 ### during save Xcode stops listening for file changes
/usr/local/bin/clang-format -style=file -i -sort-includes ${CDP} >> ${LOGPATH}/${LOGNAME} 2>&1

# EOF

请将路径 /usr/local/bin 更改为您的 clang-format 可执行文件所在的路径。
愉快编码!

3
mapbox/XcodeClangFormat扩展程序似乎是使用Xcode8与clang格式配合的一种有前途的方法。由于源代码编辑器扩展程序的限制,不幸的是,您只能为所有项目指定一个.clang-format文件。同时,“保存时格式化”也无法使用。

2
我测试了一下,它在新的Xcode插件模型的严格限制下能够做到它所能做的。我所缺少的是“保存时格式化”,但根据作者的说法这是不可能的。但它是一个尽可能接近clang-format插件的选项。 - VisorZ
@VisorZ,也许有一种方法可以结合osascript和这个插件,以便使用自动化来覆盖命令Command+S,并按下触发插件的clang-format按钮? - Zohar81

1
我在这篇博客中找到了一个可行的解决方案-在Xcode中使用代码美化器
基本上,我们可以通过Automator将clang-format作为服务运行,并在需要格式化代码时通过Xcode调用它。有关更多详细信息,请参阅博客。

0

不幸的是,您的小脚本经常无法在保存时更新Xcode中的格式化文件,因为它停止侦听文件更新。增加脚本中的睡眠持续时间并不会使其更可靠,并且会为常见的文件保存和文件格式化操作引入大量等待时间。

在您的情况下,我所做的是备份我的 Mac 并将 macOS 和 Xcode 恢复到最后一个版本,在该版本中 Alcatraz 的所有生产力插件都能正常工作。这提高了我的生产力。


0

看起来在 Xcode 8+ 中,当你取消签名 Alcatraz 插件时,它们似乎可以重新工作了。由于我没有试过这个方法,所以我只能指向该资源:

请查看该 Github 页面 ClangFormat-Xcode 上的标题 安装


我在升级到Xcode 9.2后尝试了一下。我像ClangFormat-Xcode github页面上描述的那样取消了我的Xcode签名,使用了update_xcode_plugins工具。所有其他的alcatraz插件都可以正常工作,但是ClangFormat插件无法工作。我的解决方案是使用上面的脚本,删除保存功能和延迟条目,并通过Xcodes Behaviours将其绑定到快捷键上。现在我先按CMD+S,然后按快捷键在当前文件上外部应用clangformat。 - VisorZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接