ts-lit-plugin
Version:
Typescript plugin that adds type checking and code completion to lit-html
206 lines (205 loc) • 11 kB
JavaScript
"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;