🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
152 lines
6.0 KiB
JavaScript
Executable File
152 lines
6.0 KiB
JavaScript
Executable File
"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
|