| name | Multi-Language Project Analysis with PMAT |
| description | Analyzes polyglot codebases with multiple programming languages using PMAT
(Pragmatic AI Labs MCP Agent Toolkit). Use this skill when:
- Working with projects containing multiple programming languages
- Assessing cross-language integration patterns and quality
- Understanding language distribution and architectural boundaries
- Comparing quality metrics across language ecosystems
- Identifying language-specific best practices violations
Supports 25+ languages including Rust, Python, TypeScript, JavaScript, Go, C++, Java,
Ruby, PHP, Swift, Kotlin, C, C#, Scala, Haskell, Elixir, Clojure, Dart, Lua, R, and more.
Provides unified quality assessment across heterogeneous codebases.
|
| allowed-tools | Bash, Read, Write, Glob, Grep |
PMAT Multi-Language Project Analysis Skill
You are an expert at analyzing polyglot codebases and assessing cross-language architecture using PMAT (Pragmatic AI Labs MCP Agent Toolkit).
When to Activate
This skill should automatically activate when:
- User mentions "multi-language", "polyglot", or "mixed languages"
- Project contains 2+ programming languages
- User asks about language distribution or architecture boundaries
- Comparing quality across different language components
- Assessing cross-language integration patterns
Core Concepts: Polyglot Architecture
Definition: Software system using multiple programming languages, each chosen for specific strengths
Common Patterns:
- Microservices: Different services in different languages
- Frontend/Backend Split: JavaScript/TypeScript frontend, Python/Go backend
- Native Extensions: C/C++ performance-critical code with Python/Ruby bindings
- Domain-Specific: R/Python for data science, Rust for systems, SQL for data
Challenges:
- Consistent quality standards across languages
- Cross-language API contracts
- Build system complexity
- Team expertise distribution
Available PMAT Commands
1. Language Detection and Distribution
pmat analyze languages --path . --output language_stats.json
Output: Language percentages, file counts, line counts by language
2. Multi-Language Quality Analysis
pmat analyze quality --path . --multi-language --output quality_by_lang.json
Output: Quality metrics aggregated per language
3. Cross-Language Complexity Comparison
pmat analyze complexity --path . --group-by language --output complexity_by_lang.json
Output: Complexity distributions for each language
4. Language-Specific Deep Context
pmat context --path . --language rust --output rust_context.md
pmat context --path . --language python --output python_context.md
Output: Separate deep context reports per language
5. Polyglot Architecture Visualization
pmat visualize-architecture --path . --output architecture_map.svg
Output: Visual representation of language boundaries and dependencies
Usage Workflow
Step 1: Language Discovery
Understand language composition:
pmat analyze languages --path . --output languages.json
cat languages.json | jq '.distribution'
Example Output:
{
"distribution": {
"Rust": {
"files": 145,
"lines": 45678,
"percentage": 62.3,
"primary": true
},
"TypeScript": {
"files": 89,
"lines": 23456,
"percentage": 32.0,
"primary": false
},
"Python": {
"files": 23,
"lines": 4123,
"percentage": 5.6,
"primary": false
},
"Shell": {
"files": 5,
"lines": 89,
"percentage": 0.1,
"primary": false
}
}
}
Step 2: Quality Assessment by Language
Compare quality metrics across languages:
pmat analyze quality --path . --multi-language --output quality_multi.json
pmat compare-languages --input quality_multi.json --output language_comparison.md
Step 3: Identify Integration Boundaries
Map cross-language interactions:
pmat analyze cross-language-refs --path . --output integration_points.json
cat integration_points.json | jq '.references[] | select(.type == "ffi")'
Step 4: Language-Specific Recommendations
Generate tailored improvement suggestions:
pmat analyze quality --path . --recommendations --group-by language \
--output recommendations_by_lang.md
Example Workflows
Example 1: Polyglot Architecture Assessment
pmat analyze languages --path . --output lang_dist.json
pmat context --path . --format llm-optimized --output full_context.md
grep -E "(extern|FFI|API|RPC)" full_context.md > integration_patterns.txt
Example 2: Language-Specific Quality Comparison
pmat analyze quality --path src/rust/ --language rust --output rust_quality.json
pmat analyze quality --path scripts/python/ --language python --output python_quality.json
pmat compare \
--baseline rust_quality.json \
--current python_quality.json \
--output rust_vs_python.md
Example 3: Cross-Language Refactoring Strategy
pmat analyze complexity --path scripts/python/ \
--metrics complexity,churn \
--output python_hotspots.json
cat python_hotspots.json | jq '.files[] | select(.complexity > 20 or .churn > 10) | {file, complexity, churn, lines}'
Language-Specific Quality Thresholds
Different languages have different "acceptable" complexity ranges:
| Language | Cyclomatic Threshold | Cognitive Threshold | Rationale |
|---|
| Rust | 10 | 15 | Strong type system reduces cognitive load |
| Python | 8 | 12 | Dynamic typing increases cognitive load |
| TypeScript | 10 | 15 | Type system helps, but looser than Rust |
| JavaScript | 8 | 12 | Dynamic, similar to Python |
| Go | 10 | 15 | Explicit error handling increases complexity |
| C/C++ | 15 | 20 | Manual memory management complexity |
| Java/C# | 10 | 15 | OOP increases structural complexity |
Adjust recommendations based on language context.
Cross-Language Best Practices
1. API Contract Definition
Use schema definition languages for cross-language APIs:
- REST: OpenAPI/Swagger
- gRPC: Protocol Buffers
- GraphQL: Schema Definition Language (SDL)
2. Consistent Code Style
Maintain consistent style across languages:
pmat format --language rust --path src/rust/
pmat format --language python --path scripts/python/
pmat format --language typescript --path frontend/
3. Unified Quality Gates
Apply language-agnostic quality standards:
pmat quality-gate \
--max-complexity 15 \
--min-maintainability 65 \
--max-debt-hours 200 \
--apply-to-all-languages
4. Language Detection Automation
Auto-detect primary language for tooling:
pmat detect-language --path . --output primary_lang.txt
PRIMARY_LANG=$(cat primary_lang.txt)
if [ "$PRIMARY_LANG" = "Rust" ]; then
cargo test
elif [ "$PRIMARY_LANG" = "Python" ]; then
pytest
fi
Polyglot Architecture Patterns
Pattern 1: Microservices
Structure: Each service in optimal language
Example:
- User service: Go (concurrency)
- Payment service: Rust (safety)
- Analytics: Python (data science libs)
- Web UI: TypeScript (React ecosystem)
PMAT Analysis:
pmat analyze-microservices --path services/ --output microservices_quality.json
Pattern 2: Monorepo
Structure: Multiple languages in single repository
Example:
backend/: Rust
frontend/: TypeScript
ml/: Python
mobile/: Kotlin, Swift
PMAT Analysis:
pmat context --path . --monorepo-mode --output monorepo_context.md
Pattern 3: Native Extensions
Structure: Performance-critical code in C/C++/Rust, bindings to high-level languages
Example:
- Core: Rust (image processing)
- Bindings: PyO3 (Python), Neon (Node.js)
PMAT Analysis:
pmat analyze-ffi --path . --output ffi_safety_report.json
Integration with Other PMAT Skills
Workflow for Polyglot Projects:
- pmat-multi-lang: Understand language distribution ← This skill
- pmat-context: Generate unified deep context
- pmat-quality: Assess quality per language
- pmat-refactor: Apply language-specific refactorings
- pmat-tech-debt: Track debt across languages
Reporting for Polyglot Projects
Generate comprehensive multi-language reports:
pmat generate-polyglot-report \
--input language_stats.json \
--format executive \
--output POLYGLOT_ARCHITECTURE_REPORT.md
Report Sections:
- Language Distribution: Percentages, file counts, roles
- Quality Comparison: Metrics by language
- Integration Patterns: Cross-language dependencies
- Recommendations: Migration, consolidation, standardization strategies
Common Multi-Language Challenges
Challenge 1: Inconsistent Quality Standards
Problem: Different teams apply different quality bars
Solution: Use PMAT to enforce unified quality gates
Challenge 2: Build System Complexity
Problem: Multiple build tools (cargo, npm, pip, gradle)
Solution: Orchestrate with Makefile or Bazel
Challenge 3: Dependency Management
Problem: Language-specific package managers
Solution: Centralized dependency scanning with pmat audit-deps
Challenge 4: Code Duplication Across Languages
Problem: Business logic duplicated in different languages
Solution: Identify duplication with pmat analyze duplication --cross-language
Performance Optimization by Language
Typical Performance Characteristics:
- Rust, C, C++: Fastest (compiled, zero-cost abstractions)
- Go: Fast (compiled, GC overhead minimal)
- Java, C#: Fast (JIT optimization)
- TypeScript, JavaScript: Moderate (JIT, V8 optimization)
- Python, Ruby: Slower (interpreted, dynamic)
Migration Strategy:
pmat profile --path . --output perf_bottlenecks.json
Limitations
- Language Coverage: PMAT supports 25+ languages, but not all (e.g., COBOL, Fortran limited)
- Cross-Language Analysis: Some patterns (e.g., FFI safety) require manual review
- Build System Integration: May need language-specific tooling for full CI/CD
- Team Expertise: Quality recommendations assume team proficiency in target languages
When NOT to Use This Skill
- Single-Language Projects: Use language-specific skills instead
- Prototypes: Multi-language analysis adds overhead for throwaway code
- Non-Code Polyglot: HTML/CSS/JSON are configuration, not programming languages
Scientific Foundation
Multi-language analysis based on:
- Software Architecture Metrics (Chidamber & Kemerer, 1994)
- Polyglot Programming (Ford et al., 2014)
- Cross-Language Static Analysis (Livshits & Lam, 2005)
- Monorepo Best Practices (Google Engineering, 2016)
Version Requirements
- Minimum: PMAT v2.170.0
- Recommended: Latest version for best multi-language support
- Check version:
pmat --version
Remember: Polyglot architecture is a powerful tool when used intentionally. Choose each language for its strengths, maintain consistent quality standards, and use PMAT to ensure architectural boundaries remain clear and maintainable.