# Copyright © 2025-2026 Wenze Wei. All Rights Reserved.
#
# This file is part of DMSC.
# The DMSC project belongs to the Dunimd project team.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# You may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# =============================================================================
# DMSC Project Git Ignore Configuration
# =============================================================================
# This file specifies patterns for files and directories that Git should ignore.
# These are typically build artifacts, temporary files, IDE configurations,
# and other files that should not be committed to version control.
#
# Project Context:
# - DMSC is a Rust-Python hybrid middleware framework
# - This .gitignore covers both Rust and Python build artifacts
# - Also includes common IDE and OS-specific files
# - Keeps the repository clean by excluding generated files

# =============================================================================
# Rust Build Artifacts
# =============================================================================
# Rust/Cargo build output directories and files
# These are generated during compilation and should not be committed

# Default target directory for Cargo builds
# Contains compiled binaries, intermediate objects, and dependency caches
# This directory can be very large (hundreds of MB) and is fully reproducible
target/

# Cargo.lock is typically committed for applications but ignored for libraries
# DMSC is a library, so Cargo.lock is ignored to allow dependency resolution flexibility
# Applications using DMSC should commit their own Cargo.lock
Cargo.lock

# Rust backup files created by some editors during save operations
# These are temporary files that should not be committed
**/*.rs.bk

# Windows PDB (Program Database) debug symbol files
# Generated by MSVC compiler on Windows for debugging purposes
*.pdb

# Rust project configuration for IDEs
# This is a generated file for IDE integration and should not be committed
rust-project.json

# =============================================================================
# IDE and Editor Configuration
# =============================================================================
# IDE-specific directories and files that contain local user settings
# These are personal preferences and should not be shared

# JetBrains IDE configuration directory (IntelliJ, CLion, PyCharm, etc.)
# Contains user-specific settings, run configurations, and local history
.idea/

# Visual Studio Code configuration directory
# Contains workspace settings, extensions, and debug configurations
# These are often user-specific and may contain sensitive paths
.vscode/

# Trae IDE configuration directory
# Contains Trae-specific settings and configurations
.trae/
.qoder/

# Vim swap files
# Created by Vim when editing files, used for crash recovery
*.swp
*.swo

# Backup files created by various editors
# Typically created when saving files or during auto-save
*~

# =============================================================================
# Operating System Files
# =============================================================================
# OS-specific files that are automatically generated

# macOS system files
# .DS_Store files store folder attributes and icon positions
.DS_Store
.DS_Store?

# macOS resource fork files
# These contain extended attributes and metadata
._*

# macOS Spotlight index files
# Created by the Spotlight search system
.Spotlight-V100

# macOS Trash folder
# Contains deleted files before permanent removal
.Trashes

# Windows thumbnail cache files
# Generated by Windows Explorer for image previews
Thumbs.db
ehthumbs.db

# =============================================================================
# Backup and Temporary Files
# =============================================================================
# Generic backup files and temporary files

# Generic backup file extensions
*.bak
*.backup

# Original file backups (often created by merge tools)
*.orig

# =============================================================================
# Log Files
# =============================================================================
# Application and system log files
# These are runtime-generated and should not be committed

# Generic log files
*.log

# =============================================================================
# Python Build Artifacts
# =============================================================================
# Python-specific build output and cache directories
# DMSC includes Python bindings, so Python artifacts must be ignored

# Python cache directory
# Contains compiled Python bytecode (__pycache__ directories)
__pycache__/

# Compiled Python files
# .pyc: Compiled Python bytecode (Python 2 and 3)
# .pyo: Optimized compiled Python bytecode
# .pyd: Python extension modules (Windows)
*.py[cod]

# Python class files (Jython)
*$py.class

# Compiled Python extension modules (Linux/Unix)
*.so

# Python environment marker
.Python

# Python build directories
# Contains build artifacts from setup.py or pyproject.toml builds
build/

# Development egg directories
develop-eggs/

# Distribution directories
# Contains built distributions (wheels, sdists)
dist/

# pip download cache
downloads/

# Python egg directories
eggs/

# Hidden egg directory
.eggs/

# Library directories (sometimes created by build tools)
lib/
lib64/

# Package parts directory (from distutils)
parts/

# Source distribution directory
sdist/

# Package variable directory
var/

# Wheel directories
wheels/

# Egg info directories
# Contains package metadata generated during build
*.egg-info/

# Installed package configuration
.installed.cfg

# Python egg packages
*.egg

# Python package manifest
MANIFEST

# =============================================================================
# Virtual Environment Directories
# =============================================================================
# Python virtual environment directories
# These contain isolated Python installations and should never be committed

# Environment file (may contain secrets)
.env

# Virtual environment directories
# Common names for virtual environments
.venv/
env/
venv/
ENV/

# Virtual environment backup directories
env.bak/
venv.bak/

# =============================================================================
# Code Coverage Reports
# =============================================================================
# Test coverage output files
# These are generated by coverage tools and should not be committed

# Tarpaulin (Rust coverage tool) HTML report
tarpaulin-report.html

# Cobertura XML coverage report
cobertura.xml

# LCOV coverage info file
lcov.info

# LLVM profiling raw data files
# Generated when using LLVM source-based code coverage
*.profraw

# =============================================================================
# Documentation Build Output
# =============================================================================
# Generated documentation files
# Source documentation should be in docs/, built output should be ignored

# Sphinx documentation build directory
docs/_build/

# Documentation target directory (if separate from source)
docs/target/

# =============================================================================
# Temporary Files
# =============================================================================
# Generic temporary files

# Temporary file extensions
*.tmp
*.temp

# Cache directories
.cache/

# =============================================================================
# Database Files
# =============================================================================
# Local database files
# These are typically development databases and should not be committed

# SQLite database files
*.db
*.sqlite
*.sqlite3

# =============================================================================
# Process Files
# =============================================================================
# Process-related files

# Process ID files
*.pid

# Seed files for random number generation
*.seed

# PID lock files
*.pid.lock

# =============================================================================
# Release Build Output
# =============================================================================
# Custom release build directory
# If using a separate directory for release builds

/release/
