UNPKG

ts-lit-plugin

Version:

Typescript plugin that adds type checking and code completion to lit-html

206 lines (205 loc) 11 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TsLitPlugin = void 0; var lit_analyzer_1 = require("lit-analyzer"); var translate_code_fixes_js_1 = require("./translate/translate-code-fixes.js"); var translate_completion_details_js_1 = require("./translate/translate-completion-details.js"); var translate_completions_js_1 = require("./translate/translate-completions.js"); var translate_definition_js_1 = require("./translate/translate-definition.js"); var translate_diagnostics_js_1 = require("./translate/translate-diagnostics.js"); var translate_format_edits_js_1 = require("./translate/translate-format-edits.js"); var translate_outlining_spans_js_1 = require("./translate/translate-outlining-spans.js"); var translate_quick_info_js_1 = require("./translate/translate-quick-info.js"); var translate_rename_info_js_1 = require("./translate/translate-rename-info.js"); var translate_rename_locations_js_1 = require("./translate/translate-rename-locations.js"); var TsLitPlugin = /** @class */ (function () { function TsLitPlugin(prevLangService, context) { this.prevLangService = prevLangService; this.context = context; this.litAnalyzer = new lit_analyzer_1.LitAnalyzer(this.context); } Object.defineProperty(TsLitPlugin.prototype, "program", { get: function () { return this.prevLangService.getProgram(); }, enumerable: false, configurable: true }); // All methods in this file use ...args because these methods should override // the methods on prevLangService, but that object may come from a future // version of TypeScript with more parameters, and we want to pass them // through in that case. TsLitPlugin.prototype.getCompletionEntryDetails = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 3), fileName = _b[0], position = _b[1], name = _b[2]; var file = this.program.getSourceFile(fileName); var result = this.litAnalyzer.getCompletionDetailsAtPosition(file, position, name); return (result && (0, translate_completion_details_js_1.translateCompletionDetails)(result, this.context)) || (_a = this.prevLangService).getCompletionEntryDetails.apply(_a, __spreadArray([], __read(args), false)); }; TsLitPlugin.prototype.getCompletionsAtPosition = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 2), fileName = _b[0], position = _b[1]; var file = this.program.getSourceFile(fileName); var result = this.litAnalyzer.getCompletionsAtPosition(file, position); return (result && (0, translate_completions_js_1.translateCompletions)(result)) || (_a = this.prevLangService).getCompletionsAtPosition.apply(_a, __spreadArray([], __read(args), false)); }; TsLitPlugin.prototype.getSemanticDiagnostics = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 1), fileName = _b[0]; var file = this.program.getSourceFile(fileName); var result = this.litAnalyzer.getDiagnosticsInFile(file); var prevResult = (_a = this.prevLangService).getSemanticDiagnostics.apply(_a, __spreadArray([], __read(args), false)) || []; return __spreadArray(__spreadArray([], __read(prevResult), false), __read((0, translate_diagnostics_js_1.translateDiagnostics)(result, file, this.context)), false); }; TsLitPlugin.prototype.getDefinitionAndBoundSpan = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 2), fileName = _b[0], position = _b[1]; var file = this.program.getSourceFile(fileName); var definition = this.litAnalyzer.getDefinitionAtPosition(file, position); return (definition && (0, translate_definition_js_1.translateDefinition)(definition)) || (_a = this.prevLangService).getDefinitionAndBoundSpan.apply(_a, __spreadArray([], __read(args), false)); }; TsLitPlugin.prototype.getCodeFixesAtPosition = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 3), fileName = _b[0], start = _b[1], end = _b[2]; var file = this.program.getSourceFile(fileName); var prevResult = (_a = this.prevLangService).getCodeFixesAtPosition.apply(_a, __spreadArray([], __read(args), false)) || []; var codeFixes = (0, translate_code_fixes_js_1.translateCodeFixes)(this.litAnalyzer.getCodeFixesAtPositionRange(file, { start: start, end: end }), file); return __spreadArray(__spreadArray([], __read(prevResult), false), __read(codeFixes), false); }; TsLitPlugin.prototype.getQuickInfoAtPosition = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 2), fileName = _b[0], position = _b[1]; var file = this.program.getSourceFile(fileName); var quickInfo = this.litAnalyzer.getQuickInfoAtPosition(file, position); return (quickInfo && (0, translate_quick_info_js_1.translateQuickInfo)(quickInfo)) || (_a = this.prevLangService).getQuickInfoAtPosition.apply(_a, __spreadArray([], __read(args), false)); }; TsLitPlugin.prototype.getOutliningSpans = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 1), fileName = _b[0]; var file = this.program.getSourceFile(fileName); var prev = (_a = this.prevLangService).getOutliningSpans.apply(_a, __spreadArray([], __read(args), false)); var outliningSpans = (0, translate_outlining_spans_js_1.translateOutliningSpans)(this.litAnalyzer.getOutliningSpansInFile(file)); return __spreadArray(__spreadArray([], __read(prev), false), __read(outliningSpans), false); }; TsLitPlugin.prototype.getJsxClosingTagAtPosition = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 2), fileName = _b[0], position = _b[1]; var file = this.program.getSourceFile(fileName); var result = this.litAnalyzer.getClosingTagAtPosition(file, position); return result || (_a = this.prevLangService).getJsxClosingTagAtPosition.apply(_a, __spreadArray([], __read(args), false)); }; TsLitPlugin.prototype.getSignatureHelpItems = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var result = (_a = this.prevLangService).getSignatureHelpItems.apply(_a, __spreadArray([], __read(args), false)); // Test if the signature is "html" or "css // Don't return a signature if trying to show signature for the html/css tagged template literal if (result != null && result.items.length === 1) { var displayPart = result.items[0].prefixDisplayParts[0]; if (displayPart.kind === "aliasName" && (displayPart.text === "html" || displayPart.text === "css")) { return undefined; } } return result; }; TsLitPlugin.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments, preferencesOrProvidePrefixAndSuffixTextForRename) { var _a; var args = [fileName, position, findInStrings, findInComments, preferencesOrProvidePrefixAndSuffixTextForRename]; var file = this.program.getSourceFile(fileName); var prev = (_a = this.prevLangService).findRenameLocations.apply(_a, __spreadArray([], __read(args), false)); var renameLocations = (0, translate_rename_locations_js_1.translateRenameLocations)(this.litAnalyzer.getRenameLocationsAtPosition(file, position)); if (prev == null) { return renameLocations; } return __spreadArray(__spreadArray([], __read(prev), false), __read(renameLocations), false); }; TsLitPlugin.prototype.getRenameInfo = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 2), fileName = _b[0], position = _b[1]; var file = this.program.getSourceFile(fileName); var result = this.litAnalyzer.getRenameInfoAtPosition(file, position); return (result && (0, translate_rename_info_js_1.translateRenameInfo)(result)) || (_a = this.prevLangService).getRenameInfo.apply(_a, __spreadArray([], __read(args), false)); }; TsLitPlugin.prototype.getFormattingEditsForRange = function () { var _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var _b = __read(args, 4), fileName = _b[0], settings = _b[3]; var prev = (_a = this.prevLangService).getFormattingEditsForRange.apply(_a, __spreadArray([], __read(args), false)); // Return previous result if we need to skip formatting. if (this.context.config.format.disable) { return prev; } var file = this.program.getSourceFile(fileName); var edits = (0, translate_format_edits_js_1.translateFormatEdits)(this.litAnalyzer.getFormatEditsInFile(file, settings)); return __spreadArray(__spreadArray([], __read(prev), false), __read(edits), false); }; return TsLitPlugin; }()); exports.TsLitPlugin = TsLitPlugin;