Refactor jqhtml integration to use jqhtml.boot() and migrate blade highlighting to jqhtml extension
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2
node_modules/@jqhtml/vscode-extension/.version
generated
vendored
2
node_modules/@jqhtml/vscode-extension/.version
generated
vendored
@@ -1 +1 @@
|
||||
2.2.222
|
||||
2.3.4
|
||||
|
||||
27
node_modules/@jqhtml/vscode-extension/blade-language-configuration.json
generated
vendored
Normal file
27
node_modules/@jqhtml/vscode-extension/blade-language-configuration.json
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"comments": {
|
||||
"blockComment": ["{{--", "--}}"]
|
||||
},
|
||||
"brackets": [
|
||||
["{", "}"],
|
||||
["[", "]"],
|
||||
["(", ")"]
|
||||
],
|
||||
"autoClosingPairs": [
|
||||
["{", "}"],
|
||||
["[", "]"],
|
||||
["(", ")"],
|
||||
["\"", "\""],
|
||||
["'", "'"],
|
||||
["{{", "}}"],
|
||||
["{!!", "!!}"],
|
||||
["{{--", "--}}"]
|
||||
],
|
||||
"surroundingPairs": [
|
||||
["{", "}"],
|
||||
["[", "]"],
|
||||
["(", ")"],
|
||||
["\"", "\""],
|
||||
["'", "'"]
|
||||
]
|
||||
}
|
||||
BIN
node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.2.222.vsix → node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.3.4.vsix
generated
vendored
Executable file → Normal file
BIN
node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.2.222.vsix → node_modules/@jqhtml/vscode-extension/jqhtml-vscode-extension-2.3.4.vsix
generated
vendored
Executable file → Normal file
Binary file not shown.
109
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js
generated
vendored
Normal file
109
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js
generated
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || (function () {
|
||||
var ownKeys = function(o) {
|
||||
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||
var ar = [];
|
||||
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||
return ar;
|
||||
};
|
||||
return ownKeys(o);
|
||||
};
|
||||
return function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
})();
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.BladeComponentSemanticTokensProvider = void 0;
|
||||
const vscode = __importStar(require("vscode"));
|
||||
/**
|
||||
* Provides semantic tokens for uppercase component tags in Blade files
|
||||
*
|
||||
* This provider highlights:
|
||||
* - Component tag names in cyan/turquoise (using 'class' token type)
|
||||
* - The tag="" attribute on jqhtml components in orange (using 'jqhtmlTagAttribute' token type)
|
||||
*
|
||||
* Usage:
|
||||
* Register with vscode.languages.registerDocumentSemanticTokensProvider()
|
||||
* using SemanticTokensLegend(['class', 'jqhtmlTagAttribute'])
|
||||
*/
|
||||
class BladeComponentSemanticTokensProvider {
|
||||
provideDocumentSemanticTokens(document) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const tokens_builder = new vscode.SemanticTokensBuilder();
|
||||
// Only process Blade files
|
||||
if (document.languageId !== 'blade') {
|
||||
return tokens_builder.build();
|
||||
}
|
||||
const text = document.getText();
|
||||
// Match opening tags that start with uppercase letter to find jqhtml components
|
||||
// Matches: <ComponentName ...>, captures the entire tag up to >
|
||||
const component_tag_regex = /<([A-Z][a-zA-Z0-9_]*)([^>]*?)>/g;
|
||||
let component_match;
|
||||
while ((component_match = component_tag_regex.exec(text)) !== null) {
|
||||
const tag_name = component_match[1];
|
||||
const tag_attributes = component_match[2];
|
||||
const tag_start = component_match.index + component_match[0].indexOf(tag_name);
|
||||
const tag_position = document.positionAt(tag_start);
|
||||
// Push token for the component tag name
|
||||
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
||||
tokens_builder.push(tag_position.line, tag_position.character, tag_name.length, 0, 0);
|
||||
// Now look for tag="" attribute within this component's attributes
|
||||
// Matches: tag="..." or tag='...'
|
||||
const tag_attr_regex = /\btag\s*=/g;
|
||||
let attr_match;
|
||||
while ((attr_match = tag_attr_regex.exec(tag_attributes)) !== null) {
|
||||
// Calculate the position of 'tag' within the document
|
||||
const attr_start = component_match.index + component_match[0].indexOf(tag_attributes) + attr_match.index;
|
||||
const attr_position = document.positionAt(attr_start);
|
||||
// Push token for 'tag' attribute name
|
||||
// Token type 1 maps to 'jqhtmlTagAttribute' which we'll define to be orange
|
||||
tokens_builder.push(attr_position.line, attr_position.character, 3, 1, 0);
|
||||
}
|
||||
}
|
||||
// Also match closing tags that start with uppercase letter
|
||||
// Matches: </ComponentName>
|
||||
const closing_tag_regex = /<\/([A-Z][a-zA-Z0-9_]*)/g;
|
||||
let closing_match;
|
||||
while ((closing_match = closing_tag_regex.exec(text)) !== null) {
|
||||
const tag_name = closing_match[1];
|
||||
const tag_start = closing_match.index + closing_match[0].indexOf(tag_name);
|
||||
const position = document.positionAt(tag_start);
|
||||
// Push token for the tag name
|
||||
// Token type 0 maps to 'class' which VS Code themes style as entity.name.class (turquoise/cyan)
|
||||
tokens_builder.push(position.line, position.character, tag_name.length, 0, 0);
|
||||
}
|
||||
return tokens_builder.build();
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.BladeComponentSemanticTokensProvider = BladeComponentSemanticTokensProvider;
|
||||
//# sourceMappingURL=blade_component_provider.js.map
|
||||
1
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js.map
generated
vendored
Normal file
1
node_modules/@jqhtml/vscode-extension/out/blade_component_provider.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"blade_component_provider.js","sourceRoot":"","sources":["../src/blade_component_provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;;;;;;;;;GAUG;AACH,MAAa,oCAAoC;IACvC,6BAA6B,CAAC,QAA6B;;YAC7D,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAE1D,2BAA2B;YAC3B,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAClC,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEhC,gFAAgF;YAChF,gEAAgE;YAChE,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;YAC9D,IAAI,eAAe,CAAC;YAEpB,OAAO,CAAC,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/E,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAEpD,wCAAwC;gBACxC,gGAAgG;gBAChG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEtF,mEAAmE;gBACnE,kCAAkC;gBAClC,MAAM,cAAc,GAAG,YAAY,CAAC;gBACpC,IAAI,UAAU,CAAC;gBAEf,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACjE,sDAAsD;oBACtD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;oBACzG,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAEtD,sCAAsC;oBACtC,4EAA4E;oBAC5E,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9E,CAAC;YACL,CAAC;YAED,2DAA2D;YAC3D,4BAA4B;YAC5B,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;YACrD,IAAI,aAAa,CAAC;YAElB,OAAO,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAEhD,8BAA8B;gBAC9B,gGAAgG;gBAChG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;YAED,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;KAAA;CACJ;AA3DD,oFA2DC"}
|
||||
95
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js
generated
vendored
Normal file
95
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js
generated
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || (function () {
|
||||
var ownKeys = function(o) {
|
||||
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||
var ar = [];
|
||||
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||
return ar;
|
||||
};
|
||||
return ownKeys(o);
|
||||
};
|
||||
return function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
})();
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.init_blade_language_config = void 0;
|
||||
const vscode = __importStar(require("vscode"));
|
||||
/**
|
||||
* Initialize Blade language configuration
|
||||
*
|
||||
* Sets up:
|
||||
* - Indentation rules for Blade templates
|
||||
* - Auto-indent behavior when pressing Enter between tags
|
||||
* - Word pattern for Blade files
|
||||
*
|
||||
* Call this once during extension activation.
|
||||
*/
|
||||
const init_blade_language_config = () => {
|
||||
// HTML empty elements that don't require closing tags
|
||||
const EMPTY_ELEMENTS = [
|
||||
'area',
|
||||
'base',
|
||||
'br',
|
||||
'col',
|
||||
'embed',
|
||||
'hr',
|
||||
'img',
|
||||
'input',
|
||||
'keygen',
|
||||
'link',
|
||||
'menuitem',
|
||||
'meta',
|
||||
'param',
|
||||
'source',
|
||||
'track',
|
||||
'wbr',
|
||||
];
|
||||
// Configure Blade language indentation and auto-closing behavior
|
||||
vscode.languages.setLanguageConfiguration('blade', {
|
||||
indentationRules: {
|
||||
// Increase indent after opening tag (except void elements and self-closing)
|
||||
increaseIndentPattern: /<(?!\?|(?:area|base|br|col|frame|hr|html|img|input|link|meta|param)\b|[^>]*\/>)([-_\.A-Za-z0-9]+)(?=\s|>)\b[^>]*>(?!.*<\/\1>)|<!--(?!.*-->)|\{[^}"']*$/,
|
||||
// Decrease indent on closing tag
|
||||
decreaseIndentPattern: /^\s*(<\/(?!html)[-_\.A-Za-z0-9]+\b[^>]*>|-->|\})/,
|
||||
},
|
||||
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
|
||||
onEnterRules: [
|
||||
{
|
||||
// When pressing Enter between opening and closing tags, auto-indent
|
||||
// e.g., <div>|</div> -> <div>\n |\n</div>
|
||||
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
||||
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
|
||||
action: { indentAction: vscode.IndentAction.IndentOutdent },
|
||||
},
|
||||
{
|
||||
// When pressing Enter after opening tag, auto-indent
|
||||
// e.g., <div>| -> <div>\n |
|
||||
beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join('|')}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
||||
action: { indentAction: vscode.IndentAction.Indent },
|
||||
},
|
||||
],
|
||||
});
|
||||
};
|
||||
exports.init_blade_language_config = init_blade_language_config;
|
||||
//# sourceMappingURL=blade_language_config.js.map
|
||||
1
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js.map
generated
vendored
Normal file
1
node_modules/@jqhtml/vscode-extension/out/blade_language_config.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"blade_language_config.js","sourceRoot":"","sources":["../src/blade_language_config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC;;;;;;;;;GASG;AACI,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC3C,sDAAsD;IACtD,MAAM,cAAc,GAAa;QAC7B,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,OAAO;QACP,IAAI;QACJ,KAAK;QACL,OAAO;QACP,QAAQ;QACR,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;QACP,QAAQ;QACR,OAAO;QACP,KAAK;KACR,CAAC;IAEF,iEAAiE;IACjE,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE;QAC/C,gBAAgB,EAAE;YACd,4EAA4E;YAC5E,qBAAqB,EACjB,wJAAwJ;YAC5J,iCAAiC;YACjC,qBAAqB,EACjB,kDAAkD;SACzD;QACD,WAAW,EACP,gFAAgF;QACpF,YAAY,EAAE;YACV;gBACI,oEAAoE;gBACpE,2CAA2C;gBAC3C,UAAU,EAAE,IAAI,MAAM,CAClB,UAAU,cAAc,CAAC,IAAI,CACzB,GAAG,CACN,8CAA8C,EAC/C,GAAG,CACN;gBACD,SAAS,EAAE,+BAA+B;gBAC1C,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;aAC9D;YACD;gBACI,qDAAqD;gBACrD,6BAA6B;gBAC7B,UAAU,EAAE,IAAI,MAAM,CAClB,UAAU,cAAc,CAAC,IAAI,CACzB,GAAG,CACN,sCAAsC,EACvC,GAAG,CACN;gBACD,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;aACvD;SACJ;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AA3DW,QAAA,0BAA0B,8BA2DrC"}
|
||||
152
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js
generated
vendored
Normal file
152
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js
generated
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || (function () {
|
||||
var ownKeys = function(o) {
|
||||
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||
var ar = [];
|
||||
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||
return ar;
|
||||
};
|
||||
return ownKeys(o);
|
||||
};
|
||||
return function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
})();
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.blade_spacer = void 0;
|
||||
const vscode = __importStar(require("vscode"));
|
||||
/**
|
||||
* Blade Auto-Spacing Provider
|
||||
*
|
||||
* Automatically adds spaces inside Blade tags when typing:
|
||||
* {{ -> {{ | }} (cursor at |)
|
||||
* {!! -> {!! | !!}
|
||||
* {{-- -> {{-- | --}}
|
||||
*
|
||||
* Configuration:
|
||||
* Set 'jqhtml.enableBladeAutoSpacing' to false to disable
|
||||
* (or modify the config key below to match your extension's namespace)
|
||||
*/
|
||||
const TAG_DOUBLE = 0;
|
||||
const TAG_UNESCAPED = 1;
|
||||
const TAG_COMMENT = 2;
|
||||
const snippets = {
|
||||
[TAG_DOUBLE]: '{{ ${1:${TM_SELECTED_TEXT/[{}]//g}} }}$0',
|
||||
[TAG_UNESCAPED]: '{!! ${1:${TM_SELECTED_TEXT/[{} !]//g}} !!}$0',
|
||||
[TAG_COMMENT]: '{{-- ${1:${TM_SELECTED_TEXT/(--)|[{} ]//g}} --}}$0',
|
||||
};
|
||||
const triggers = ['{}', '!', '-', '{'];
|
||||
const regexes = [
|
||||
/({{(?!\s|-))(.*?)(}})/,
|
||||
/({!!(?!\s))(.*?)?(}?)/,
|
||||
/({{[\s]?--)(.*?)?(}})/,
|
||||
];
|
||||
const translate = (position, offset) => {
|
||||
try {
|
||||
return position.translate(0, offset);
|
||||
}
|
||||
catch (error) {
|
||||
// VS Code doesn't like negative numbers passed
|
||||
// to translate (even though it works fine), so
|
||||
// this block prevents debug console errors
|
||||
}
|
||||
return position;
|
||||
};
|
||||
const chars_for_change = (doc, change) => {
|
||||
if (change.text === '!') {
|
||||
return 2;
|
||||
}
|
||||
if (change.text !== '-') {
|
||||
return 1;
|
||||
}
|
||||
const start = translate(change.range.start, -2);
|
||||
const end = translate(change.range.start, -1);
|
||||
return doc.getText(new vscode.Range(start, end)) === ' ' ? 4 : 3;
|
||||
};
|
||||
/**
|
||||
* Main entry point - call this from onDidChangeTextDocument
|
||||
*
|
||||
* @param e - The text document change event
|
||||
* @param editor - The active text editor (optional)
|
||||
* @param config_enabled - Whether auto-spacing is enabled (default: true)
|
||||
* Pass your own config check here, e.g.:
|
||||
* vscode.workspace.getConfiguration('jqhtml').get('enableBladeAutoSpacing', true)
|
||||
*/
|
||||
const blade_spacer = (e_1, editor_1, ...args_1) => __awaiter(void 0, [e_1, editor_1, ...args_1], void 0, function* (e, editor, config_enabled = true) {
|
||||
if (!config_enabled ||
|
||||
!editor ||
|
||||
editor.document.fileName.indexOf('.blade.php') === -1) {
|
||||
return;
|
||||
}
|
||||
let tag_type = -1;
|
||||
let ranges = [];
|
||||
let offsets = [];
|
||||
// Changes (per line) come in right-to-left when we need them left-to-right
|
||||
const changes = e.contentChanges.slice().reverse();
|
||||
changes.forEach((change) => {
|
||||
if (triggers.indexOf(change.text) === -1) {
|
||||
return;
|
||||
}
|
||||
if (!offsets[change.range.start.line]) {
|
||||
offsets[change.range.start.line] = 0;
|
||||
}
|
||||
const start_offset = offsets[change.range.start.line] -
|
||||
chars_for_change(e.document, change);
|
||||
const start = translate(change.range.start, start_offset);
|
||||
const line_end = e.document.lineAt(start.line).range.end;
|
||||
for (let i = 0; i < regexes.length; i++) {
|
||||
// If we typed a - or a !, don't consider the "double" tag type
|
||||
if (i === TAG_DOUBLE && ['-', '!'].indexOf(change.text) !== -1) {
|
||||
continue;
|
||||
}
|
||||
// Only look at unescaped tags if we need to
|
||||
if (i === TAG_UNESCAPED && change.text !== '!') {
|
||||
continue;
|
||||
}
|
||||
// Only look at comment tags if we need to
|
||||
if (i === TAG_COMMENT && change.text !== '-') {
|
||||
continue;
|
||||
}
|
||||
const tag = regexes[i].exec(e.document.getText(new vscode.Range(start, line_end)));
|
||||
if (tag) {
|
||||
tag_type = i;
|
||||
ranges.push(new vscode.Range(start, start.translate(0, tag[0].length)));
|
||||
offsets[start.line] += tag[1].length;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (ranges.length > 0 && snippets[tag_type]) {
|
||||
editor.insertSnippet(new vscode.SnippetString(snippets[tag_type]), ranges);
|
||||
}
|
||||
});
|
||||
exports.blade_spacer = blade_spacer;
|
||||
//# sourceMappingURL=blade_spacer.js.map
|
||||
1
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js.map
generated
vendored
Normal file
1
node_modules/@jqhtml/vscode-extension/out/blade_spacer.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"blade_spacer.js","sourceRoot":"","sources":["../src/blade_spacer.ts"],"names":[],"mappings":"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"}
|
||||
29
node_modules/@jqhtml/vscode-extension/out/extension.js
generated
vendored
29
node_modules/@jqhtml/vscode-extension/out/extension.js
generated
vendored
@@ -39,6 +39,9 @@ const vscode = __importStar(require("vscode"));
|
||||
const formatter_1 = require("./formatter");
|
||||
const componentIndex_1 = require("./componentIndex");
|
||||
const definitionProvider_1 = require("./definitionProvider");
|
||||
const blade_component_provider_1 = require("./blade_component_provider");
|
||||
const blade_spacer_1 = require("./blade_spacer");
|
||||
const blade_language_config_1 = require("./blade_language_config");
|
||||
function activate(context) {
|
||||
console.log('JQHTML extension activated');
|
||||
// Initialize component index
|
||||
@@ -133,6 +136,32 @@ function activate(context) {
|
||||
if (config.get('formatOnSave')) {
|
||||
console.log('JQHTML: Format on save is enabled');
|
||||
}
|
||||
// =========================================================================
|
||||
// BLADE SUPPORT (Optional - controlled by jqhtml.enableBladeSupport setting)
|
||||
// =========================================================================
|
||||
const jqhtmlConfig = vscode.workspace.getConfiguration('jqhtml');
|
||||
const bladeSupport = jqhtmlConfig.get('enableBladeSupport', true);
|
||||
if (bladeSupport) {
|
||||
// Register Blade component semantic tokens provider
|
||||
// Highlights component tag names and tag="" attributes in .blade.php files
|
||||
const bladeComponentProvider = new blade_component_provider_1.BladeComponentSemanticTokensProvider();
|
||||
context.subscriptions.push(vscode.languages.registerDocumentSemanticTokensProvider([{ language: 'blade' }, { pattern: '**/*.blade.php' }], bladeComponentProvider, new vscode.SemanticTokensLegend(['class', 'jqhtmlTagAttribute'])));
|
||||
console.log('JQHTML: Blade component highlighting registered');
|
||||
// Register Blade auto-spacing ({{ -> {{ | }})
|
||||
const getAutoSpacingEnabled = () => {
|
||||
return vscode.workspace.getConfiguration('jqhtml').get('enableBladeAutoSpacing', true);
|
||||
};
|
||||
context.subscriptions.push(vscode.workspace.onDidChangeTextDocument((event) => {
|
||||
(0, blade_spacer_1.blade_spacer)(event, vscode.window.activeTextEditor, getAutoSpacingEnabled());
|
||||
}));
|
||||
console.log('JQHTML: Blade auto-spacing registered');
|
||||
// Initialize Blade language configuration (indentation rules)
|
||||
(0, blade_language_config_1.init_blade_language_config)();
|
||||
console.log('JQHTML: Blade language configuration initialized');
|
||||
}
|
||||
else {
|
||||
console.log('JQHTML: Blade support disabled via settings');
|
||||
}
|
||||
console.log('JQHTML: All features registered (formatter, auto-close, goto definition, hover)');
|
||||
// Return public API for other extensions
|
||||
return {
|
||||
|
||||
2
node_modules/@jqhtml/vscode-extension/out/extension.js.map
generated
vendored
2
node_modules/@jqhtml/vscode-extension/out/extension.js.map
generated
vendored
File diff suppressed because one or more lines are too long
51
node_modules/@jqhtml/vscode-extension/package.json
generated
vendored
Executable file → Normal file
51
node_modules/@jqhtml/vscode-extension/package.json
generated
vendored
Executable file → Normal file
@@ -2,7 +2,7 @@
|
||||
"name": "@jqhtml/vscode-extension",
|
||||
"displayName": "JQHTML",
|
||||
"description": "Syntax highlighting and language support for JQHTML template files",
|
||||
"version": "2.2.222",
|
||||
"version": "2.3.4",
|
||||
"publisher": "jqhtml",
|
||||
"license": "MIT",
|
||||
"publishConfig": {
|
||||
@@ -22,6 +22,7 @@
|
||||
"snippets",
|
||||
"images",
|
||||
"language-configuration.json",
|
||||
"blade-language-configuration.json",
|
||||
".version",
|
||||
"README.md",
|
||||
"LLM_REFERENCE.md",
|
||||
@@ -68,6 +69,10 @@
|
||||
"light": "./images/jqhtml-icon.svg",
|
||||
"dark": "./images/jqhtml-icon.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "blade",
|
||||
"configuration": "./blade-language-configuration.json"
|
||||
}
|
||||
],
|
||||
"grammars": [
|
||||
@@ -75,6 +80,14 @@
|
||||
"language": "jqhtml",
|
||||
"scopeName": "source.jqhtml",
|
||||
"path": "./syntaxes/jqhtml.tmLanguage.json"
|
||||
},
|
||||
{
|
||||
"scopeName": "source.jqhtml.blade-injection",
|
||||
"path": "./syntaxes/blade-jqhtml.tmLanguage.json",
|
||||
"injectTo": [
|
||||
"text.blade",
|
||||
"text.html.php"
|
||||
]
|
||||
}
|
||||
],
|
||||
"snippets": [
|
||||
@@ -93,6 +106,42 @@
|
||||
},
|
||||
"editor.bracketPairColorization.enabled": false,
|
||||
"editor.guides.bracketPairs": false
|
||||
},
|
||||
"editor.semanticTokenColorCustomizations": {
|
||||
"rules": {
|
||||
"jqhtmlTagAttribute": "#FFA500"
|
||||
}
|
||||
}
|
||||
},
|
||||
"semanticTokenTypes": [
|
||||
{
|
||||
"id": "jqhtmlTagAttribute",
|
||||
"superType": "parameter",
|
||||
"description": "The tag attribute on jqhtml components"
|
||||
}
|
||||
],
|
||||
"semanticTokenScopes": [
|
||||
{
|
||||
"scopes": {
|
||||
"jqhtmlTagAttribute": [
|
||||
"entity.other.attribute-name.jqhtml.tag"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration": {
|
||||
"title": "JQHTML",
|
||||
"properties": {
|
||||
"jqhtml.enableBladeSupport": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "Enable JQHTML component highlighting in Laravel Blade (.blade.php) files"
|
||||
},
|
||||
"jqhtml.enableBladeAutoSpacing": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "Automatically add spaces inside Blade tags when typing ({{ -> {{ | }})"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
20
node_modules/@jqhtml/vscode-extension/syntaxes/blade-jqhtml.tmLanguage.json
generated
vendored
Normal file
20
node_modules/@jqhtml/vscode-extension/syntaxes/blade-jqhtml.tmLanguage.json
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "Blade JQHTML Components",
|
||||
"scopeName": "source.jqhtml.blade-injection",
|
||||
"injectionSelector": "L:text.blade, L:text.html.php",
|
||||
"patterns": [
|
||||
{
|
||||
"comment": "JQHTML Component Tags",
|
||||
"name": "meta.tag.jqhtml.component",
|
||||
"match": "(</?)(([A-Z][A-Za-z0-9_]*))(?=[\\s/>])",
|
||||
"captures": {
|
||||
"1": {
|
||||
"name": "punctuation.definition.tag.html"
|
||||
},
|
||||
"2": {
|
||||
"name": "entity.name.tag.component.jqhtml"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user