UNPKG

lit-analyzer

Version:

CLI that type checks bindings in lit-html templates

86 lines (85 loc) 4.25 kB
"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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LitHtmlVscodeService = void 0; var vscode = __importStar(require("vscode-html-languageservice")); var virtual_document_js_1 = require("../../parse/document/virtual-document/virtual-document.js"); var range_util_js_1 = require("../../util/range-util.js"); var htmlService = vscode.getLanguageService(); function makeVscTextDocument(htmlDocument) { return vscode.TextDocument.create("untitled://embedded.html", "html", 1, htmlDocument.virtualDocument.text); } function makeVscHtmlDocument(vscTextDocument) { return htmlService.parseHTMLDocument(vscTextDocument); } var LitHtmlVscodeService = /** @class */ (function () { function LitHtmlVscodeService() { } LitHtmlVscodeService.prototype.getClosingTagAtOffset = function (document, offset) { var vscTextDocument = makeVscTextDocument(document); var vscHtmlDocument = makeVscHtmlDocument(vscTextDocument); var htmlLSPosition = vscTextDocument.positionAt(offset); var tagComplete = htmlService.doTagComplete(vscTextDocument, htmlLSPosition, vscHtmlDocument); if (tagComplete == null) return; // Html returns completions with snippet placeholders. Strip these out. return { newText: tagComplete.replace(/\$\d/g, "") }; }; LitHtmlVscodeService.prototype.format = function (document, settings) { var parts = document.virtualDocument.getPartsAtDocumentRange((0, range_util_js_1.makeDocumentRange)({ start: 0, end: document.virtualDocument.location.end - document.virtualDocument.location.start })); var ranges = (0, virtual_document_js_1.textPartsToRanges)(parts); var originalHtml = parts.map(function (p) { return (typeof p === "string" ? p : "[#".concat("#".repeat(p.getText().length), "]")); }).join(""); var vscTextDocument = vscode.TextDocument.create("untitled://embedded.html", "html", 1, originalHtml); var edits = htmlService.format(vscTextDocument, undefined, { tabSize: settings.tabSize, insertSpaces: !!settings.convertTabsToSpaces, wrapLineLength: 90, unformatted: "", contentUnformatted: "pre,code,textarea", indentInnerHtml: true, preserveNewLines: true, maxPreserveNewLines: undefined, indentHandlebars: false, endWithNewline: false, extraLiners: "head, body, /html", wrapAttributes: "auto" }); var hasLeadingNewline = originalHtml.startsWith("\n"); var hasTrailingNewline = originalHtml.endsWith("\n"); var newHtml = "".concat(hasLeadingNewline ? "\n" : "").concat(vscode.TextDocument.applyEdits(vscTextDocument, edits)).concat(hasTrailingNewline ? "\n" : ""); var splitted = newHtml.split(/\[#+\]/); return splitted.map(function (newText, i) { var range = ranges[i]; return { range: (0, range_util_js_1.documentRangeToSFRange)(document, range), newText: newText }; }); }; return LitHtmlVscodeService; }()); exports.LitHtmlVscodeService = LitHtmlVscodeService;