Claude-skill-registry clang-format Configuration
The model must invoke this skill when any trigger occurs - (1) user mentions "clang-format" or ".clang-format", (2) user requests analyzing code style/formatting patterns/conventions, (3) user requests creating/modifying/generating formatting configuration, (4) user troubleshoots formatting behavior or unexpected results, (5) user asks about brace styles/indentation/spacing/alignment/line breaking/pointer alignment, (6) user wants to preserve existing style/minimize whitespace changes/reduce formatting diffs/codify dominant conventions.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/clang-format" ~/.claude/skills/majiayu000-claude-skill-registry-clang-format-configuration && rm -rf "$T"
skills/data/clang-format/SKILL.mdclang-format Configuration
Configure the clang-format code formatting tool using ready-to-use templates, integration scripts, and comprehensive reference documentation.
Purpose
This skill provides procedural workflows for clang-format configuration tasks:
- Create new .clang-format files from proven templates
- Analyze existing code style and generate matching configurations
- Set up editor and git integration with bundled scripts
- Troubleshoot formatting behavior using reference documentation
Workflow Routing by Trigger Type
Once invoked, route to appropriate workflow based on which trigger fired:
Trigger 1: Explicit clang-format mention → If user asks about specific options: Consult references/01-09.md for relevant category → If user needs complete reference: Direct to references/complete/clang-format-style-options.md → If user asks about CLI usage: Reference references/cli-usage.md
Trigger 2: Code style analysis request → Follow "Analyzing Existing Code Style" workflow below → Examine code samples systematically (braces→indentation→spacing→breaking→alignment) → Map patterns to closest template in assets/configs/ → Generate initial configuration hypothesis as a temporary configuration file "/tmp/<reponame>/hypothesis<number>.clang-format" → VERIFY IMPACT: Run
clang-format --style="/tmp/<repo_name>/hypothesis_<number>.clang-format" file.cpp | diff - file.cpp on 3-5 representative samples → MEASURE IMPACT using weighted scoring: • Metric 1: Line count changes (lines added/removed) - weight 10 • Metric 2: In-line whitespace changes (spacing within existing lines) - weight 1 • Impact Score = (line_count_changes × 10) + (whitespace_changes × 1) • Lower score = lower impact to rebasing conflicts, future git-diff analysis, and merge request change reviews = better configuration → ITERATE: Adjust config options targeting highest-impact settings, re-test, compare scores → REPEAT until reaching minimal achievable score while maintaining consistent style enforcement → REPORT TO USER: Present winning configuration with: • Final impact score and breakdown (line changes vs whitespace changes) • Comparison table showing all tested hypotheses and their scores • Example diff snippets showing what will change, with commands for the user to test it themselves against files of their choice. • Rationale for selected configuration → AWAIT USER APPROVAL before finalizing configuration → Only after approval: provide final configuration file
Trigger 3: Configuration file operations → If creating new: Follow "Creating New Configuration from Template" workflow → If modifying existing: Read current config, identify changes needed, consult relevant category guide → If generating from code: Use Trigger 2 workflow (code style analysis)
Trigger 4: Formatting behavior investigation → Follow "Troubleshooting Formatting Issues" workflow below → Verify config detection with --dump-config → Identify affected category, consult relevant references/0X.md guide → Test isolated options with minimal config
Trigger 5: Style option inquiries → Map question to category: braces→03, indentation→04, spacing→05, alignment→01, breaking→02 → Reference specific category guide in references/ → Provide examples from quick-reference.md if applicable
Trigger 6: Minimal-disruption requests → Use "Analyzing Existing Code Style" workflow to match current patterns → Emphasize starting from closest template to minimize changes → Test on representative samples before project-wide application → Document which patterns were preserved vs normalized
Bundled Resources
Configuration Templates (assets/configs/)
Seven ready-to-use
.clang-format templates optimized for common scenarios:
- Google C++ style with 4-space indent, 120 column limitgoogle-cpp-modified.clang-format
- Linux kernel coding standards (tabs, K&R braces)linux-kernel.clang-format
- Microsoft/Visual Studio conventionsmicrosoft-visual-studio.clang-format
- Modern C++17/20 style with contemporary idiomsmodern-cpp17-20.clang-format
- Compact style for space-constrained environmentscompact-dense.clang-format
- Spacious style prioritizing readabilityreadable-spacious.clang-format
- Multi-language configuration (C++, JavaScript, Java)multi-language.clang-format
When to use templates: Start new projects, establish team standards, or quickly test formatting approaches.
Integration Scripts (assets/integrations/)
Three editor and git integration scripts:
- Git hook script for automatic formatting of staged files (works with pre-commit or prek framework)pre-commit
- Vim configuration for format-on-savevimrc-clang-format.vim
- Emacs configuration for clang-format integrationemacs-clang-format.el
When to use integrations: Set up automatic formatting in development workflow.
Note: The pre-commit hook script works with both the pre-commit framework (Python) and prek (Rust alternative). Both frameworks use
.pre-commit-config.yaml with identical syntax.
Reference Documentation (references/)
Detailed documentation organized by category:
Quick Navigation:
- Overview and documentation hubindex.md
- Complete working configurations with explanationsquick-reference.md
- Command-line usage, editor setup, CI/CD integrationcli-usage.md
Option Categories (01-09.md):
- Vertical alignment of declarations, assignments, operators01-alignment.md
- Line breaking and wrapping rules02-breaking.md
- Brace placement styles (K&R, Allman, GNU, etc.)03-braces.md
- Indentation rules and special cases04-indentation.md
- Whitespace control around operators, keywords05-spacing.md
- Include/import organization and sorting06-includes.md
- Language-specific options for C++, Java, JavaScript07-languages.md
- Comment formatting and reflow08-comments.md
- Penalty system, raw string formatting, experimental features09-advanced.md
Complete Reference (complete/):
- Full command-line interface documentationclang-format-cli.md
- All 194 style options with examplesclang-format-style-options.md
Common Workflows
Creating New Configuration from Template
To create a new
.clang-format file:
- Identify requirements (style guide, team preferences, language)
- Select closest template from
assets/configs/ - Copy template to project root as
.clang-format - Test formatting:
clang-format --dry-run file.cpp - Customize specific options using references/01-09.md as needed
- Verify changes:
clang-format file.cpp | diff - file.cpp
Example:
# Copy Google C++ template cp assets/configs/google-cpp-modified.clang-format /path/to/project/.clang-format # Test on sample file clang-format --dry-run /path/to/project/src/main.cpp # Apply if satisfied clang-format -i /path/to/project/src/*.cpp
Analyzing Existing Code Style
To generate configuration matching existing code:
- Examine code samples for formatting patterns
- Identify key characteristics:
- Brace placement → consult
references/03-braces.md - Indentation (spaces/tabs, width) → consult
references/04-indentation.md - Spacing (operators, keywords) → consult
references/05-spacing.md - Line breaking (column limit, wrapping) → consult
references/02-breaking.md - Alignment patterns → consult
references/01-alignment.md
- Brace placement → consult
- Map patterns to closest base style in
references/quick-reference.md - Start with that template from
assets/configs/ - Override specific options to match observed patterns
- Test on representative code samples
- Iterate until formatting matches existing style
This workflow minimizes whitespace-only changes when introducing clang-format to existing projects.
Setting Up Editor Integration
To enable format-on-save in editors:
Vim:
- Copy
content toassets/integrations/vimrc-clang-format.vim.vimrc - Restart Vim or source configuration
- Save any C/C++/Java file to trigger formatting
Emacs:
- Copy
to Emacs configassets/integrations/emacs-clang-format.el - Restart Emacs or evaluate configuration
- Save any supported file to trigger formatting
Other editors: Consult
references/cli-usage.md for VS Code, CLion, and other editor setup instructions.
Setting Up Git Hook for Formatting
Option 1: Using pre-commit/prek framework (Recommended):
Configure in
.pre-commit-config.yaml:
repos: - repo: https://github.com/pre-commit/mirrors-clang-format rev: v19.1.7 hooks: - id: clang-format
Then install:
pre-commit install or prek install
Option 2: Manual git hook:
- Copy
toassets/integrations/pre-commit.git/hooks/pre-commit - Make executable:
chmod +x .git/hooks/pre-commit - Test by staging and committing changes
The hook formats only staged files, preserving unstaged changes.
Troubleshooting Formatting Issues
When formatting produces unexpected results:
- Verify configuration detection:
clang-format --dump-config file.cpp - Check command options in
references/cli-usage.md - Identify affected formatting category (braces, spacing, breaking, etc.)
- Consult relevant category guide in references/01-09.md
- Test isolated options: create minimal config with suspect option
- For comprehensive option details, check
references/complete/clang-format-style-options.md
Setting Up CI/CD Formatting Checks
To enforce formatting in continuous integration:
- Review CI examples in
references/cli-usage.md - Add clang-format check to pipeline:
# Check formatting without modifying files clang-format --dry-run --Werror src/**/*.{cpp,h} - Configure to fail build on formatting violations
- Document formatting requirements for contributors
Key Concepts
Base Styles: Predefined configurations (LLVM, Google, Chromium, Mozilla, WebKit, Microsoft, GNU) provide starting points. Set with
BasedOnStyle: Google then override specific options.
Multi-Language Support: Configure different languages separately in single file using
Language: key. See assets/configs/multi-language.clang-format for example.
Penalty System: clang-format uses penalties to choose between formatting alternatives. Higher penalty values discourage specific choices. See
references/09-advanced.md for details.
Progressive Refinement: Start with template closest to requirements, then customize incrementally. Test frequently on representative code samples.
Testing Configurations
# Preview changes without modifying file clang-format --dry-run file.cpp # Show diff of proposed changes clang-format file.cpp | diff - file.cpp # Apply formatting to file clang-format -i file.cpp # Format entire project find src include -name '*.cpp' -o -name '*.h' | xargs clang-format -i # Check formatting in CI (fail on violations) clang-format --dry-run --Werror src/**/*.{cpp,h}
Navigation Strategy
For most tasks, follow this progression:
- Start with templates: Browse
for ready-to-use configurationsassets/configs/ - Quick reference: Check
for complete configurations with explanationsreferences/quick-reference.md - Category guides: Consult
for specific option categoriesreferences/01-09.md - CLI usage: Reference
for command-line and integration detailsreferences/cli-usage.md - Complete reference: Use
for exhaustive option documentationreferences/complete/
When analyzing code or troubleshooting, identify the formatting aspect (braces, spacing, alignment, etc.) and jump directly to the relevant category guide in references/.