# JQHTML VS Code Extension
Syntax highlighting and language support for JQHTML template files.
## Features
### Syntax Highlighting
Full syntax highlighting for all JQHTML constructs:
- **Component Definitions**: ``
- **Template Expressions**: `<%= expression %>`
- **Control Flow**: `<% if (condition) { %> ... <% } %>`
- **Slots**: `<#slotname>` with let:prop support
- **Data Bindings**: `:property="value"`
- **Event Handlers**: `@click="handler"`
- **Special Attributes**: `$sid="name"`, `$property="value"`
- **Components**: ``
- **Comments**: `<%-- comment --%>`
### Language Configuration
- **Auto-closing pairs**: Automatically close tags, brackets, and quotes
- **Bracket matching**: Highlight matching brackets and tags
- **Code folding**: Fold component definitions
- **Smart indentation**: Handles control flow
- **Comment toggling**: Use standard VS Code shortcuts to toggle comments
### Code Snippets
Quick snippets for common patterns:
| Prefix | Description |
|--------|-------------|
| `define` | Component definition |
| `definecomp` | Component with structure |
| `if` | If statement |
| `ifelse` | If-else |
| `for` | For loop |
| `exp` | Expression `<%= %>` |
| `$sid` | Scoped ID attribute |
| `:prop` | Property binding |
| `@event` | Event handler |
| `slot` | Named slot |
| `slotprop` | Slot with props |
| `comment` | Comment block |
## Installation
### From Marketplace (when published)
1. Open VS Code
2. Go to Extensions (Ctrl+Shift+X / Cmd+Shift+X)
3. Search for "JQHTML"
4. Click Install
### From Source (Development)
1. Clone the JQHTML repository
2. Navigate to `packages/vscode-extension`
3. Run `npm install`
4. Run `npm run compile`
5. Copy the folder to VS Code extensions directory:
- Windows: `%USERPROFILE%\.vscode\extensions`
- macOS/Linux: `~/.vscode/extensions`
6. Restart VS Code
### Using .vsix Package
1. Package the extension: `vsce package`
2. In VS Code: Extensions → ... → Install from VSIX
3. Select the generated .vsix file
## Usage
The extension automatically activates for `.jqhtml` files. Features include:
### Syntax Highlighting
All JQHTML syntax is highlighted with semantic colors:
```jqhtml
<%= this.data.name %>
<% if (this.data.isAdmin) { %>
Admin
<% } %>
<% for (const skill of this.data.skills) { %>
<%= skill %>
<% } %>
```
### IntelliSense
Basic HTML tag and attribute completion is provided through VS Code's built-in HTML support.
### Code Folding
Component definitions can be folded at the `` level:
```
▼
...
```
### Formatting Support
The extension respects VS Code's formatting settings.
## Configuration
The extension sets these defaults for JQHTML files:
```json
{
"[jqhtml]": {
"editor.wordWrap": "on",
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
}
}
}
```
You can override these in your VS Code settings.
## Theme Support
The extension uses standard TextMate scopes and works with all VS Code themes. For best results, use a theme with good HTML/JavaScript support.
### Scope Reference
- `entity.name.class.component.jqhtml` - Component names
- `entity.name.tag.slot.jqhtml` - Slot names (header, row, footer, etc.)
- `keyword.control.slot.jqhtml` - Slot prefix `#` symbol
- `keyword.control.flow.jqhtml` - Control flow keywords (if, for, etc.)
- `punctuation.definition.attribute.special.jqhtml` - `$` prefix
- `punctuation.definition.attribute.binding.jqhtml` - `:` prefix
- `punctuation.definition.attribute.event.jqhtml` - `@` prefix
## Known Issues
### Bracket Matching Errors with Split Control Flow
When using control flow split across multiple `<% %>` blocks, VS Code may show bracket matching errors:
```jqhtml
<% if (condition) { %>
Content
<% } else if (otherCondition) { %> ⚠️ VS Code shows bracket error here
Other content
<% } %>
```
**Why this happens:** VS Code's bracket matcher can't track bracket state across separate template blocks. It sees a closing `}` without a matching opening `{` in the same block.
**Solution:** The extension automatically disables bracket colorization for `.jqhtml` files:
```json
{
"[jqhtml]": {
"editor.bracketPairColorization.enabled": false,
"editor.guides.bracketPairs": false
}
}
```
These visual errors don't affect functionality.
### Other Known Issues
- Complex nested template expressions may not highlight perfectly
- Some edge cases in mixed HTML/JavaScript contexts
## Contributing
Contributions are welcome! The extension source is in the JQHTML repository under `packages/vscode-extension`.
### Development
1. Clone the repository
2. Open in VS Code
3. Run `npm install`
4. Press F5 to launch a new VS Code window with the extension
5. Open a `.jqhtml` file to test
### Testing
Create test files in `test-files/` to verify syntax highlighting:
```bash
# Run automated tests
npm test
# Manual testing
# 1. Launch extension (F5)
# 2. Open test files
# 3. Verify highlighting
```
## License
MIT License - See LICENSE file in the JQHTML repository
## Changelog
### 2.0.0
- Initial release
- Full JQHTML v2 syntax support
- Brace-style control flow
- Slot syntax with let:prop
- Data binding and event handlers
- Component highlighting
- Code snippets