Files
everforest-resources/.serena/memories/code-style-conventions.md
Ismo Vuorinen 11baabe545 feat: initial scaffold and generator
- Complete project structure with directories for all target platforms
- Template system for CLI tools with color placeholder replacement
- Working generator that processes templates for 6 theme variants
- GitHub workflows for build, snapshots, commitlint, and cli-verify
- Installer and verifier scripts for CLI tool deployment
- Comprehensive documentation and specifications
- Biome 2.x linting and formatting setup
- Husky git hooks for pre-commit validation
2025-09-05 23:06:12 +03:00

140 lines
4.1 KiB
Markdown

# Code Style & Conventions - Everforest Resources
## JavaScript/Node.js Style
### Module System
- **ES Modules**: All files use `.mjs` extension
- **Imports**: Use ES6 import/export syntax
- **Type**: `"type": "module"` in package.json
### Biome Configuration
The project uses **Biome 2.x** for linting and formatting with these settings:
- **Version**: 2.2.3 (latest)
- **Indent**: 2 spaces
- **Line width**: 100 characters
- **Quotes**: Single quotes for JavaScript, double for JSX
- **Semicolons**: Always required
- **Trailing commas**: ES5 style
- **Arrow parentheses**: As needed
### Class Structure
```javascript
class EverforestGenerator {
constructor() {
this.palette = null;
}
async methodName() {
// Async/await preferred over Promises
}
}
```
### Naming Conventions
- **Classes**: PascalCase (`EverforestGenerator`)
- **Methods**: camelCase (`loadPalette`, `processTemplate`)
- **Constants**: camelCase for most, UPPER_SNAKE_CASE for true constants
- **Files**: kebab-case (`generate-themes.mjs`)
### Error Handling
- Use try-catch blocks for async operations
- Log errors with emoji prefixes: `console.error('❌ Failed to load palette')`
- Exit with code 1 on critical errors: `process.exit(1)`
### Console Output
- Use emoji for visual feedback:
- ✅ Success messages
- ❌ Error messages
- 🎨 Starting operations
- 📝 Progress updates
- ✨ Completion messages
### Code Quality Rules
- **Variables**: Use `const` by default, `let` when reassignment needed
- **Functions**: Prefer arrow functions for callbacks
- **Imports**: Organize imports automatically with Biome
- **Unused Variables**: Not allowed (error level)
- **Block Statements**: Always use braces for control structures
- **forEach**: Allowed for side effects (useIterableCallbackReturn disabled)
## Template System Conventions
### Placeholder Format
- Use double curly braces: `{{colorName}}`
- Available placeholders: `{{bg}}`, `{{fg}}`, `{{red}}`, `{{orange}}`, `{{yellow}}`, `{{green}}`, `{{aqua}}`, `{{blue}}`, `{{purple}}`, `{{gray1}}`, `{{gray2}}`, `{{gray3}}`
### Template Files
- Named `template.txt` in each tool directory
- Multiple templates for complex tools (e.g., `colors-template.txt`, `prompt-template.txt`)
- Never edit generated output files directly
## Documentation Style
### Code Comments
- Use JSDoc-style comments for classes and methods
- Include purpose and architecture notes at file top
- Explain complex logic inline
### Markdown
- **Critical Rule**: Use indented code blocks only (4 spaces)
- Never use triple backticks (```)
- Use emoji in headers and lists for visual hierarchy
## Git Conventions
### Commit Messages
- Follow Conventional Commits format
- Examples:
- `feat: add starship theme generator`
- `fix: correct color mapping in templates`
- `docs: update CLI installation guide`
### Branch Strategy
- Main branch: `main`
- All CI checks must pass for merge
- Required checks: lint + build + snapshots + commitlint + cli-verify
## File Organization
### Directory Structure
```
palettes/ # Color definitions (JSON/YAML)
scripts/ # Generator and validation scripts
cli/ # CLI tool templates and configs
editors/ # Editor theme files
terminals/ # Terminal configurations
web/ # CSS and demo files
docs/ # Documentation
meta/ # Project specifications
biome.json # Biome 2.x configuration
```
### File Naming
- Scripts: `kebab-case.mjs`
- Configs: Tool-specific conventions
- Templates: `template.txt` or `tool-template.txt`
### Biome File Processing
Biome processes these files:
- JavaScript modules: `scripts/**/*.mjs`, `scripts/**/*.js`
- JSON files: `*.json`
- Root level JS files: `*.mjs`, `*.js`
Biome ignores:
- Generated output files
- Node modules and build artifacts
- Unknown file types (by default)
## Development Commands
```bash
# Format code
npm run format # Format all files with Biome 2.x
# Lint code
npm run lint # Check for issues
npm run lint:fix # Auto-fix issues
# Before committing
npm run lint:fix && npm run format
```