275 lines
6.1 KiB
Markdown
275 lines
6.1 KiB
Markdown
# RelSpec Template Editor for VS Code
|
|
|
|
Visual editor and tooling for RelSpec PostgreSQL migration templates.
|
|
|
|
## Features
|
|
|
|
### 1. Template Preview
|
|
- **Command**: `RelSpec: Preview Template`
|
|
- **Shortcut**: Click the preview icon in the editor title bar
|
|
- Preview your templates with sample data
|
|
- Side-by-side view of template, data, and rendered SQL
|
|
|
|
### 2. Syntax Validation
|
|
- **Command**: `RelSpec: Validate Template`
|
|
- Automatic validation on save (configurable)
|
|
- Highlights syntax errors inline
|
|
- Checks for unclosed template tags
|
|
|
|
### 3. IntelliSense
|
|
- Auto-completion for template functions
|
|
- Function signatures and documentation on hover
|
|
- Keyword completions (`if`, `range`, `template`, etc.)
|
|
|
|
### 4. Template Scaffolding
|
|
- **Command**: `RelSpec: New Template`
|
|
- Quick scaffolding for common template types:
|
|
- DDL operations
|
|
- Constraints
|
|
- Indexes
|
|
- Audit trails
|
|
- Reusable fragments
|
|
|
|
### 5. Function Library
|
|
- **Command**: `RelSpec: List Available Functions`
|
|
- Browse all available template functions
|
|
- See examples and documentation
|
|
- Quick reference for template development
|
|
|
|
## Installation
|
|
|
|
### From Source
|
|
|
|
1. Clone the RelSpec repository
|
|
2. Navigate to the extension directory:
|
|
```bash
|
|
cd vscode-extension
|
|
```
|
|
3. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
4. Compile the extension:
|
|
```bash
|
|
npm run compile
|
|
```
|
|
5. Open in VS Code:
|
|
```bash
|
|
code .
|
|
```
|
|
6. Press `F5` to launch the extension in a new window
|
|
|
|
### From VSIX (when published)
|
|
|
|
```bash
|
|
code --install-extension relspec-template-editor-0.1.0.vsix
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Opening Templates
|
|
|
|
1. Open your RelSpec project in VS Code
|
|
2. Navigate to `pkg/writers/pgsql/templates/`
|
|
3. Open any `.tmpl` file
|
|
4. The extension will automatically activate
|
|
|
|
### Previewing Templates
|
|
|
|
1. Open a template file
|
|
2. Click the preview icon in the editor title bar OR
|
|
3. Run command: `RelSpec: Preview Template` (Ctrl+Shift+P)
|
|
4. The preview pane will show:
|
|
- Your template source
|
|
- Sample data (configurable)
|
|
- Rendered SQL output
|
|
|
|
### Configuring Sample Data
|
|
|
|
Set custom sample data for preview in settings:
|
|
|
|
```json
|
|
{
|
|
"relspec.previewSampleData": {
|
|
"SchemaName": "public",
|
|
"TableName": "users",
|
|
"ColumnName": "email",
|
|
"Columns": [
|
|
{"Name": "id", "Type": "integer", "NotNull": true},
|
|
{"Name": "email", "Type": "text"}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Creating New Templates
|
|
|
|
1. Run command: `RelSpec: New Template`
|
|
2. Select template type
|
|
3. Enter template name
|
|
4. The extension creates a scaffolded template
|
|
5. Edit and customize
|
|
|
|
### Using IntelliSense
|
|
|
|
Type `{{` to trigger auto-completion:
|
|
|
|
```gotmpl
|
|
{{upper // Shows function signature and documentation
|
|
{{. // Shows available fields from data structure
|
|
```
|
|
|
|
Hover over function names to see:
|
|
- Function signature
|
|
- Description
|
|
- Usage examples
|
|
|
|
## Configuration
|
|
|
|
Available settings:
|
|
|
|
| Setting | Type | Default | Description |
|
|
|---------|------|---------|-------------|
|
|
| `relspec.templatePath` | string | `pkg/writers/pgsql/templates` | Path to template directory |
|
|
| `relspec.autoValidate` | boolean | `true` | Validate templates on save |
|
|
| `relspec.showDataStructures` | boolean | `true` | Show data structure hints in preview |
|
|
| `relspec.previewSampleData` | object | `{}` | Sample JSON data for preview |
|
|
|
|
## Keyboard Shortcuts
|
|
|
|
| Command | Shortcut | Description |
|
|
|---------|----------|-------------|
|
|
| Preview Template | N/A | Click preview icon in title bar |
|
|
| Validate Template | N/A | Use command palette |
|
|
| New Template | N/A | Use command palette |
|
|
|
|
## Template Functions Reference
|
|
|
|
The extension provides IntelliSense for all RelSpec template functions:
|
|
|
|
### String Manipulation
|
|
- `upper` - Convert to uppercase
|
|
- `lower` - Convert to lowercase
|
|
- `title` - Title case
|
|
- `snake_case` - Convert to snake_case
|
|
- `camelCase` - Convert to camelCase
|
|
|
|
### SQL Formatting
|
|
- `indent` - Indent text
|
|
- `quote` - Quote for SQL
|
|
- `escape` - Escape special characters
|
|
- `safe_identifier` - Make safe SQL identifier
|
|
|
|
### Type Conversion
|
|
- `goTypeToSQL` - Go type → SQL type
|
|
- `sqlTypeToGo` - SQL type → Go type
|
|
- `isNumeric` - Check if numeric type
|
|
- `isText` - Check if text type
|
|
|
|
### Collection Helpers
|
|
- `first` - First element
|
|
- `last` - Last element
|
|
- `filter` - Filter elements
|
|
- `mapFunc` - Map function
|
|
- `join_with` - Join with separator
|
|
- `join` - Join strings
|
|
|
|
See full documentation: [Template Functions](../pkg/writers/pgsql/TEMPLATE_FUNCTIONS.md)
|
|
|
|
## Code Snippets
|
|
|
|
The extension includes snippets for common patterns:
|
|
|
|
| Prefix | Description |
|
|
|--------|-------------|
|
|
| `tmpl-define` | Define a new template |
|
|
| `tmpl-template` | Use a template |
|
|
| `tmpl-block` | Define a block |
|
|
| `tmpl-if` | If statement |
|
|
| `tmpl-range` | Range loop |
|
|
| `tmpl-with` | With statement |
|
|
|
|
## Development
|
|
|
|
### Building
|
|
|
|
```bash
|
|
npm run compile
|
|
```
|
|
|
|
### Watching
|
|
|
|
```bash
|
|
npm run watch
|
|
```
|
|
|
|
### Linting
|
|
|
|
```bash
|
|
npm run lint
|
|
```
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
npm test
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Extension Not Activating
|
|
|
|
**Problem**: Extension doesn't activate when opening .tmpl files
|
|
|
|
**Solution**:
|
|
1. Check that file has `.tmpl` extension
|
|
2. Reload VS Code window (Ctrl+Shift+P → "Reload Window")
|
|
3. Check extension is enabled in Extensions panel
|
|
|
|
### Preview Not Working
|
|
|
|
**Problem**: Preview shows error or doesn't update
|
|
|
|
**Solution**:
|
|
1. Ensure RelSpec binary is in PATH
|
|
2. Check template syntax is valid
|
|
3. Verify sample data is valid JSON
|
|
|
|
### IntelliSense Not Working
|
|
|
|
**Problem**: Auto-completion doesn't trigger
|
|
|
|
**Solution**:
|
|
1. Type `{{` to trigger
|
|
2. Check language mode is set to "Go Template"
|
|
3. Reload window
|
|
|
|
## Contributing
|
|
|
|
Contributions welcome! Please:
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Make your changes
|
|
4. Add tests
|
|
5. Submit a pull request
|
|
|
|
## License
|
|
|
|
Same as RelSpec project license.
|
|
|
|
## Links
|
|
|
|
- [RelSpec Documentation](../README.md)
|
|
- [Template Documentation](../pkg/writers/pgsql/TEMPLATES.md)
|
|
- [Template Inheritance](../pkg/writers/pgsql/TEMPLATE_INHERITANCE.md)
|
|
- [Issue Tracker](https://github.com/yourorg/relspec/issues)
|
|
|
|
## Changelog
|
|
|
|
### 0.1.0 (Initial Release)
|
|
- Template preview with sample data
|
|
- Syntax validation
|
|
- IntelliSense for functions
|
|
- Template scaffolding
|
|
- Function library browser
|