apulSoft Blog
The command line tool clang-format allows to apply a configurable format to c++ sources. While being supported officially by Visual Studio and Visual Studio Code, Xcode on macOS has no official support.
As far as I know, existing 3rd party Xcode extensions are either broken with the latest Xcode versions or ship with their own (and outdated) versions of clang-format. To get consistent results, the same clang-format version needs to be used everywhere.
I was looking for a way to use an up-to-date version of clang-format (installed and updated using homebrew)
My solution is to use the macOS built-in Automator. It can send the currently selected text through a shell script:
- Install clang-format (version >= 14) using homebrew.
- Open Automator.app
- Create a new "quick action"
- Copy/paste the following script and replace the [CONFIG_FILE_PATH] placeholder with the correct path to your clang-format config file.
# requires clang-format v14 or better! /opt/homebrew/bin/clang-format --style=file:[CONFIG_FILE_PATH]/.clang-format
- Configure the Automator action:
- Save the "Quick Action" with a descriptive name.
- It now shows up in the "Services" context menu of selected text in the target applications.
- Open System Preferences and navigate to Keyboard/Shortcuts.
- Under the "Text" category, the chosen name should show up and a keyboard shortcut can be assigned.
Now in Xcode (or any other C++ source editor), a piece of code can be selected and the keyboard shortcut will process it using clang-format. Usually, I do a select-all/format combo to format entire files.
When working with large legacy codebases I like to have the option (using manual selection) to format just the new code to avoid getting those huge and confusing reformat git diffs.
Comments
Latest Blog Posts
Aug 21st, 2024Windows .msi Plugin Installer using WiX v5
Jun 1st, 2024Matched Digital Allpass IIR Filters
Oct 27th, 2022Clang-Format Xcode Automator Quick Action
Mar 16th, 2022Tags
math(7)dsp(4)
filters(3)
cpp(3)
blog(2)
webdesign(1)
gui(1)
macOS(1)
optimization(1)
lessonslearned(1)
Windows(1)
WiX(1)