Initial commit
This commit is contained in:
238
skills/clang-format/references/index.md
Normal file
238
skills/clang-format/references/index.md
Normal file
@@ -0,0 +1,238 @@
|
||||
# clang-format Configuration Skill
|
||||
|
||||
A comprehensive skill for configuring clang-format to format C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# code.
|
||||
|
||||
## Navigation
|
||||
|
||||
### Quick Access
|
||||
|
||||
- [CLI Usage](cli-usage.md) - Command-line tools, flags, and integrations
|
||||
- [Quick Reference](quick-reference.md) - Common patterns and complete examples
|
||||
|
||||
### Style Options by Category
|
||||
|
||||
1. [Alignment Options](01-alignment.md) - Align code elements consistently
|
||||
2. [Breaking & Line Wrapping](02-breaking.md) - Control line breaks and wrapping
|
||||
3. [Brace Styles](03-braces.md) - Configure brace placement and wrapping
|
||||
4. [Indentation](04-indentation.md) - Control indentation behavior
|
||||
5. [Spacing](05-spacing.md) - Fine-tune whitespace placement
|
||||
6. [Include Organization](06-includes.md) - Sort and organize include directives
|
||||
7. [Language-Specific](07-languages.md) - Options for specific languages
|
||||
8. [Comments & Misc](08-comments.md) - Comment formatting and other options
|
||||
9. [Advanced Options](09-advanced.md) - Experimental and advanced features
|
||||
|
||||
### Complete Reference Documentation
|
||||
|
||||
- [Full CLI Reference](complete/clang-format-cli.md) - Complete command-line documentation
|
||||
- [Full Style Options](complete/clang-format-style-options.md) - Complete style configuration reference
|
||||
|
||||
## What is clang-format?
|
||||
|
||||
clang-format is a tool that automatically formats source code according to configurable style rules. It ensures consistent code formatting across your project and team.
|
||||
|
||||
**Supported Languages:**
|
||||
|
||||
- C/C++
|
||||
- Java
|
||||
- JavaScript/TypeScript
|
||||
- JSON
|
||||
- Objective-C
|
||||
- Protocol Buffers
|
||||
- C#
|
||||
- Verilog
|
||||
- TableGen
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Create a Configuration File
|
||||
|
||||
Generate a `.clang-format` file based on a predefined style:
|
||||
|
||||
```bash
|
||||
clang-format -style=llvm -dump-config > .clang-format
|
||||
```
|
||||
|
||||
**Available Base Styles:**
|
||||
|
||||
- `LLVM` - LLVM coding conventions
|
||||
- `Google` - Google C++ Style Guide
|
||||
- `GNU` - GNU coding style
|
||||
- `Chromium` - Chromium project style
|
||||
- `Microsoft` - Microsoft coding style
|
||||
- `Mozilla` - Mozilla coding style
|
||||
- `WebKit` - WebKit coding style
|
||||
|
||||
### 2. Customize Your Configuration
|
||||
|
||||
Edit `.clang-format` to customize specific options:
|
||||
|
||||
```yaml
|
||||
# Start with a base style
|
||||
BasedOnStyle: Google
|
||||
|
||||
# Customize specific options
|
||||
IndentWidth: 4
|
||||
ColumnLimit: 120
|
||||
PointerAlignment: Left
|
||||
```
|
||||
|
||||
### 3. Format Your Code
|
||||
|
||||
```bash
|
||||
# Format a single file in-place
|
||||
clang-format -i src/main.cpp
|
||||
|
||||
# Format multiple files
|
||||
clang-format -i src/*.cpp include/*.h
|
||||
|
||||
# Check without modifying (dry run)
|
||||
clang-format --dry-run src/main.cpp
|
||||
|
||||
# Format only changed lines in git
|
||||
git clang-format
|
||||
```
|
||||
|
||||
## Configuration File Structure
|
||||
|
||||
A `.clang-format` file uses YAML format with key-value pairs:
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Language-specific settings
|
||||
Language: Cpp
|
||||
|
||||
# Base style to inherit from
|
||||
BasedOnStyle: LLVM
|
||||
|
||||
# Indentation
|
||||
IndentWidth: 4
|
||||
UseTab: Never
|
||||
TabWidth: 4
|
||||
|
||||
# Line length
|
||||
ColumnLimit: 100
|
||||
|
||||
# Braces
|
||||
BreakBeforeBraces: Allman
|
||||
|
||||
# Spacing
|
||||
SpaceBeforeParens: ControlStatements
|
||||
|
||||
# Pointer alignment
|
||||
PointerAlignment: Left
|
||||
|
||||
# Include sorting
|
||||
SortIncludes: true
|
||||
```
|
||||
|
||||
## Common Workflows
|
||||
|
||||
### Format on Commit
|
||||
|
||||
Format only staged changes before committing:
|
||||
|
||||
```bash
|
||||
git clang-format
|
||||
```
|
||||
|
||||
### Format Entire Project
|
||||
|
||||
```bash
|
||||
find src include -name '*.cpp' -o -name '*.h' | xargs clang-format -i
|
||||
```
|
||||
|
||||
### Check Formatting in CI
|
||||
|
||||
```bash
|
||||
clang-format --dry-run --Werror src/*.cpp include/*.h
|
||||
```
|
||||
|
||||
### Ignore Specific Files
|
||||
|
||||
Create `.clang-format-ignore`:
|
||||
|
||||
```text
|
||||
# Ignore third-party code
|
||||
third_party/**
|
||||
external/**
|
||||
|
||||
# Ignore generated files
|
||||
*.pb.cc
|
||||
*.pb.h
|
||||
```
|
||||
|
||||
## Editor Integration
|
||||
|
||||
clang-format integrates with popular editors:
|
||||
|
||||
- **VS Code**: Install "Clang-Format" extension
|
||||
- **CLion**: Built-in support (detects `.clang-format`)
|
||||
- **Vim**: Use clang-format.py script
|
||||
- **Emacs**: Use clang-format.el
|
||||
|
||||
See [CLI Usage](cli-usage.md) for detailed integration instructions.
|
||||
|
||||
## Finding Style Options
|
||||
|
||||
Options are organized by category:
|
||||
|
||||
- **Need to align assignments?** → [Alignment Options](01-alignment.md)
|
||||
- **Control where lines break?** → [Breaking & Line Wrapping](02-breaking.md)
|
||||
- **Configure brace placement?** → [Brace Styles](03-braces.md)
|
||||
- **Adjust indentation?** → [Indentation](04-indentation.md)
|
||||
- **Fine-tune spacing?** → [Spacing](05-spacing.md)
|
||||
- **Organize includes?** → [Include Organization](06-includes.md)
|
||||
- **Language-specific needs?** → [Language-Specific](07-languages.md)
|
||||
|
||||
## Example Configurations
|
||||
|
||||
See [Quick Reference](quick-reference.md) for complete configuration examples:
|
||||
|
||||
- Google C++ style customized
|
||||
- Linux kernel style
|
||||
- Corporate/Microsoft style
|
||||
- Modern C++ style
|
||||
|
||||
## Documentation Structure
|
||||
|
||||
This skill is organized into:
|
||||
|
||||
1. **Navigable sections** - Categorized options for easy browsing
|
||||
2. **Complete reference** - Full documentation for deep dives
|
||||
3. **Quick reference** - Ready-to-use configuration examples
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Version control** your `.clang-format` file in the repository root
|
||||
2. **Start with a base style** that matches your existing conventions
|
||||
3. **Make minimal changes** to the base style to reduce maintenance
|
||||
4. **Document deviations** from standard styles in comments
|
||||
5. **Test on representative code** before applying project-wide
|
||||
6. **Use git integration** to format only changed lines
|
||||
7. **Set up editor integration** for automatic formatting
|
||||
8. **Create `.clang-format-ignore`** for files that shouldn't be formatted
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Configuration not found?**
|
||||
|
||||
- clang-format searches for `.clang-format` or `_clang-format` from the source file's directory upward
|
||||
- Use `-style=file:/path/to/.clang-format` to specify explicitly
|
||||
|
||||
**Unknown options warning?**
|
||||
|
||||
- Use `--Wno-error=unknown` to allow formatting with unknown (newer) options
|
||||
- This happens when your config has options not supported by your clang-format version
|
||||
|
||||
**Want to check effective config?**
|
||||
|
||||
```bash
|
||||
clang-format -dump-config file.cpp
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- Browse [Style Options by Category](#style-options-by-category) to customize formatting
|
||||
- Check [Quick Reference](quick-reference.md) for complete working examples
|
||||
- Review [CLI Usage](cli-usage.md) for advanced command-line usage
|
||||
- Consult full reference documentation for comprehensive details
|
||||
Reference in New Issue
Block a user