mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
169 lines
5.0 KiB
Markdown
169 lines
5.0 KiB
Markdown
# Coding Standards
|
|
|
|
## Python Standards
|
|
|
|
### Code Formatting
|
|
- **Line Length**: 88 characters (Black default)
|
|
- **Imports**: Use isort with Black-compatible settings
|
|
- **Quotes**: Double quotes for strings, single quotes for string literals in code
|
|
- **Indentation**: 4 spaces, no tabs
|
|
|
|
### Naming Conventions
|
|
- **Variables/Functions**: snake_case (e.g., `user_name`, `calculate_total`)
|
|
- **Classes**: PascalCase (e.g., `UserManager`, `DatabaseConnection`)
|
|
- **Constants**: UPPER_SNAKE_CASE (e.g., `MAX_RETRY_ATTEMPTS`)
|
|
- **Private**: Leading underscore (e.g., `_internal_method`)
|
|
|
|
### Type Hints
|
|
- **Required**: All function signatures must have type hints
|
|
- **Return Types**: Always specify return types, use `None` for procedures
|
|
- **Generics**: Use generic types for containers (List[str], Dict[str, Any])
|
|
- **Optional**: Use `Optional[T]` for nullable parameters
|
|
|
|
```python
|
|
def process_data(
|
|
items: List[Dict[str, Any]],
|
|
threshold: float = 0.5
|
|
) -> Optional[ProcessedData]:
|
|
"""Process data items with optional threshold."""
|
|
pass
|
|
```
|
|
|
|
### Documentation
|
|
- **Docstrings**: Google style for all public functions and classes
|
|
- **Comments**: Explain why, not what (code should be self-documenting)
|
|
- **TODO/FIXME**: Include issue numbers when applicable
|
|
|
|
```python
|
|
def calculate_similarity(text1: str, text2: str) -> float:
|
|
"""Calculate semantic similarity between two texts.
|
|
|
|
Args:
|
|
text1: First text to compare
|
|
text2: Second text to compare
|
|
|
|
Returns:
|
|
Similarity score between 0 and 1
|
|
|
|
Raises:
|
|
ValueError: If either text is empty
|
|
"""
|
|
pass
|
|
```
|
|
|
|
### Error Handling
|
|
- **Specific Exceptions**: Catch specific exceptions, not bare `except:`
|
|
- **Error Messages**: Include context in error messages
|
|
- **Logging**: Log errors with appropriate levels
|
|
- **Recovery**: Implement graceful degradation when possible
|
|
|
|
```python
|
|
try:
|
|
result = risky_operation()
|
|
except SpecificError as e:
|
|
logger.error(f"Operation failed for {context}: {e}")
|
|
raise ProcessingError(f"Cannot process {item_name}") from e
|
|
```
|
|
|
|
## JavaScript/TypeScript Standards
|
|
|
|
### Code Formatting
|
|
- **Tool**: Prettier with default settings
|
|
- **Semicolons**: Always use semicolons
|
|
- **Quotes**: Single quotes for strings, double quotes for JSX attributes
|
|
- **Trailing Commas**: Always include trailing commas
|
|
|
|
### Naming Conventions
|
|
- **Variables/Functions**: camelCase (e.g., `userName`, `calculateTotal`)
|
|
- **Classes**: PascalCase (e.g., `UserManager`, `DatabaseConnection`)
|
|
- **Constants**: UPPER_SNAKE_CASE (e.g., `MAX_RETRY_ATTEMPTS`)
|
|
- **Files**: kebab-case for components, camelCase for utilities
|
|
|
|
### TypeScript Specifics
|
|
- **Interfaces**: Use interfaces for object shapes
|
|
- **Types**: Use type aliases for unions and complex types
|
|
- **Strict Mode**: Enable strict TypeScript settings
|
|
- **Null Safety**: Use strict null checks
|
|
|
|
```typescript
|
|
interface UserData {
|
|
id: string;
|
|
name: string;
|
|
email?: string;
|
|
}
|
|
|
|
type ProcessingResult = 'success' | 'failure' | 'pending';
|
|
|
|
function processUser(user: UserData): ProcessingResult {
|
|
// Implementation
|
|
}
|
|
```
|
|
|
|
## SQL Standards
|
|
|
|
### Formatting
|
|
- **Keywords**: UPPERCASE for SQL keywords (SELECT, FROM, WHERE)
|
|
- **Names**: snake_case for table and column names
|
|
- **Indentation**: Align clauses and subqueries
|
|
- **Line Breaks**: One clause per line for complex queries
|
|
|
|
```sql
|
|
SELECT
|
|
u.id,
|
|
u.name,
|
|
COUNT(p.id) as post_count
|
|
FROM users u
|
|
LEFT JOIN posts p ON p.user_id = u.id
|
|
WHERE u.created_at > '2024-01-01'
|
|
GROUP BY u.id, u.name
|
|
ORDER BY post_count DESC;
|
|
```
|
|
|
|
### Design
|
|
- **Primary Keys**: Always use surrogate keys (id)
|
|
- **Foreign Keys**: Explicit foreign key constraints
|
|
- **Indexes**: Index foreign keys and frequently queried columns
|
|
- **Naming**: Consistent naming conventions
|
|
|
|
## Markdown Standards
|
|
|
|
### Structure
|
|
- **Headings**: Use ATX-style headers (#, ##, ###)
|
|
- **Lists**: Use dashes (-) for unordered lists
|
|
- **Code Blocks**: Always specify language for syntax highlighting
|
|
- **Links**: Use descriptive link text
|
|
|
|
### Organization
|
|
- **TOC**: Include table of contents for long documents
|
|
- **Sections**: Logical section organization with consistent depth
|
|
- **Examples**: Include code examples where relevant
|
|
- **Updates**: Track document updates with dates
|
|
|
|
## Git Standards
|
|
|
|
### Commit Messages
|
|
- **Format**: Conventional Commits (feat:, fix:, docs:, etc.)
|
|
- **Length**: 50 character summary, detailed description if needed
|
|
- **Imperative**: Use imperative mood ("Add feature" not "Added feature")
|
|
|
|
```
|
|
feat(memory): add hybrid markdown and SQLite storage
|
|
|
|
- Implement MemoryManager class with dual storage
|
|
- Add FTS5 support for full-text search
|
|
- Include sqlite-vec integration for vector search
|
|
- Support both global and project-specific contexts
|
|
|
|
Closes #123
|
|
```
|
|
|
|
### Branching
|
|
- **Feature**: `feature/description` or `feature/issue-number`
|
|
- **Bugfix**: `fix/description` or `fix/issue-number`
|
|
- **Hotfix**: `hotfix/description`
|
|
- **Release**: `release/version`
|
|
|
|
---
|
|
|
|
*Last updated: 2025-01-12*
|
|
*Applies to: All Hanzo projects* |