# PMAT Examples
This directory contains runnable examples demonstrating various features of PMAT.
## Running Examples
All examples can be run using `cargo run --example <example_name>`:
```bash
# Run a specific example
cargo run --example quality_gate
cargo run --example analyze_complexity
```
## Available Examples
### Quality Analysis Examples
#### `quality_gate`
Demonstrates comprehensive quality gate functionality with different configurations.
```bash
cargo run --example quality_gate
```
#### `analyze_complexity`
Shows how to use complexity analysis with CI/CD integration.
```bash
cargo run --example analyze_complexity
```
#### `analyze_dead_code`
Demonstrates dead code detection with configurable thresholds.
```bash
cargo run --example analyze_dead_code
```
#### `analyze_satd`
Shows Self-Admitted Technical Debt detection with various modes.
```bash
cargo run --example analyze_satd
```
#### `quality_proxy_demo`
**NEW** - Interactive demonstration of the Quality Proxy service for enforcing code quality on AI-generated code.
Shows all three enforcement modes (Strict, Advisory, Auto-Fix) with real examples.
```bash
cargo run --example quality_proxy_demo
```
Features demonstrated:
- High-quality code acceptance in strict mode
- SATD rejection and automatic removal
- Advisory mode with warnings
- Auto-fix mode with refactoring
- Complexity threshold enforcement
### CI/CD Integration Examples
#### `ci_integration`
Comprehensive CI/CD workflow examples for multiple platforms:
- GitHub Actions
- GitLab CI
- Jenkins
- CircleCI
- Pre-commit hooks
```bash
cargo run --example ci_integration
```
#### `exit_codes`
Reference guide for exit code behavior in CI/CD environments.
```bash
cargo run --example exit_codes
```
### Testing Examples
#### `complexity_demo`
Contains various complexity patterns for testing the analyzer:
- Simple functions (low complexity)
- Moderate complexity functions
- High complexity functions
- Very high complexity patterns
```bash
cargo run --example complexity_demo
pmat analyze complexity --include "server/examples/complexity_demo.rs"
```
#### `lint_hotspot_demo`
Demonstrates lint hotspot analysis with intentional code quality issues.
```bash
cargo run --example lint_hotspot_demo
```
### MCP Server Examples
#### `unified_mcp_demo` (NEW v2.2.0)
Demonstrates the unified MCP server architecture showing consolidation of all tools.
```bash
cargo run --example unified_mcp_demo
```
This example shows:
- Unified server with 17 core tools
- Quality proxy integration
- Single pmcp SDK implementation
- Architecture benefits and tool organization
#### `mcp_server_pmcp`
Demonstrates running the pmat MCP server using the pmcp Rust SDK.
```bash
# Start the MCP server
cargo run --example mcp_server_pmcp
# Connect with an MCP client in another terminal
npx @modelcontextprotocol/inspector tcp://127.0.0.1:3000
```
This example shows:
- Setting up an MCP server with the pmcp SDK
- Registering all pmat analysis tools
- Handling TCP connections
- Type-safe tool implementations
### Other Examples
#### `complexity_validation`
Validates complexity calculations against expected values.
```bash
cargo run --example complexity_validation
```
#### `complexity_isolation`
Tests complexity analysis in isolation.
```bash
cargo run --example complexity_isolation
```
## Example Patterns
### CI/CD Integration Pattern
```rust
// Check with custom thresholds and fail on violation
let result = handle_analyze_complexity(
PathBuf::from("."),
None,
vec![],
None,
ComplexityOutputFormat::Json,
None,
Some(15), // Max cyclomatic complexity
Some(10), // Max cognitive complexity
vec![],
false,
10,
true, // fail_on_violation - will exit(1) if violated
).await;
```
### Quality Gate Pattern
```rust
// Run comprehensive quality checks
let result = handle_quality_gate(
PathBuf::from("."),
None,
QualityGateOutputFormat::Json,
true, // fail_on_violation
vec![],
10.0, // max dead code percentage
2.0, // min entropy
20, // max complexity
false,
None,
false,
).await;
```
## Creating New Examples
When adding new examples:
1. Create a new `.rs` file in this directory
2. Add a `main` function (use `#[tokio::main]` for async)
3. Include helpful comments explaining what the example demonstrates
4. Add the example to this README
5. Test that it runs: `cargo run --example your_example`
## Best Practices
1. **Clear Output**: Use clear section headers and explanations
2. **Error Handling**: Show both success and failure cases
3. **Real-World Usage**: Demonstrate practical, real-world scenarios
4. **Documentation**: Include inline comments explaining each step
5. **Multiple Scenarios**: Show different configurations and use cases