# Linthis Default Configuration
# This file contains built-in defaults that are applied when no user/project config exists.

# Maximum cyclomatic complexity threshold
max_complexity = 20

# Default exclusion patterns
exclude = [
    ".git/**",
    ".hg/**",
    ".svn/**",
    "node_modules/**",
    "target/**",
    "vendor/**",
    "build/**",
    "dist/**",
    "__pycache__/**",
    "*.pyc",
    "*.pyo",
    ".venv/**",
    "venv/**",
    ".idea/**",
    ".vscode/**",
    "*.min.js",
    "*.min.css",
    "**/Pods/**",
]

# Output settings
[output]
format = "human"  # human, json, github-actions
color = "auto"    # auto, always, never

# Parallel processing
[parallel]
enabled = true
jobs = 0  # 0 = auto-detect CPU count

# Python settings (uses ruff for both linting and formatting)
[python]
# Ruff is used for both linting and formatting (10-100x faster than flake8+black)
linter = "ruff"
formatter = "ruff"
line_length = 120
target_version = "py38"

# Rust settings
[rust]
linter = "clippy"
formatter = "rustfmt"

# TypeScript/JavaScript settings
[typescript]
linter = "eslint"
formatter = "prettier"

# Go settings
[go]
linter = "go vet"
formatter = "gofmt"

# C/C++ settings
[cpp]
# Linter: "clang-tidy" (preferred, more powerful) or "cpplint" (fallback)
linter = "clang-tidy"
# Formatter: clang-format for code style, clang-tidy --fix for lint fixes
formatter = "clang-format"
# Style for clang-format (google, llvm, chromium, mozilla, webkit)
style = "google"
# Enable clang-tidy --fix during format phase (fixes C-style casts, nullptr, etc.)
clang_tidy_fix = true
# Enable cpplint fixer during format phase (fixes header guards, TODOs, etc.)
cpplint_fix = true
# Directory containing compile_commands.json (optional, auto-detected if not set)
# Auto-detection searches up to 6 levels: cmake*/, build*/, out*/, *_build/, *-build/
# and platform dirs: android/, ios/, arm*/, x86*/, debug/, release/, static/, shared/
# compile_commands_dir = "cmake_build/debug/Android/static/arm64-v8a"
# Cpplint line length (default: 80, common values: 100, 120)
linelength = 120
# Cpplint filter rules (comma-separated, -category to disable, +category to enable)
# cpplint_filter = "-build/c++11,-build/c++14"

# Cpplint fixer settings
[cpp.cpplint_fix]
# Header guard mode: "fix_name" (default) or "pragma_once"
header_guard_mode = "fix_name"
# Username for TODO comments (default: git user.name or $USER)
# todo_username = "your_username"
# Copyright template (optional, with {year} placeholder)
# copyright_template = "// Copyright {year} Your Company. All rights reserved."
# Header guard prefix (optional)
# header_guard_prefix = "MYPROJECT_"

# Objective-C settings (different from C++)
[oc]
# Cpplint line length for OC
linelength = 120
# Cpplint filter rules - disable checks not applicable to Objective-C
cpplint_filter = "-build/c++11,-build/c++14,-build/header_guard,-build/include,-legal/copyright,-readability/casting,-runtime/references,-runtime/int,-whitespace/braces,-whitespace/blank_line,-readability/braces,-whitespace/empty_if_body"

# Plugin settings
[plugin]
# Auto-sync settings (inspired by oh-my-zsh auto-update)
[plugin.auto_sync]
enabled = true           # Enable automatic plugin synchronization
mode = "prompt"          # Sync mode: "auto" (automatic), "prompt" (ask before sync), "disabled"
interval_days = 7        # Check for updates every N days
