ts-lit-plugin
Version:
Typescript plugin that adds type checking and code completion to lit-html
131 lines (130 loc) • 7.7 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 __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TsLitPlugin = void 0;
var lit_analyzer_1 = require("lit-analyzer");
var translate_code_fixes_1 = require("./translate/translate-code-fixes");
var translate_completion_details_1 = require("./translate/translate-completion-details");
var translate_completions_1 = require("./translate/translate-completions");
var translate_definition_1 = require("./translate/translate-definition");
var translate_diagnostics_1 = require("./translate/translate-diagnostics");
var translate_format_edits_1 = require("./translate/translate-format-edits");
var translate_outlining_spans_1 = require("./translate/translate-outlining-spans");
var translate_quick_info_1 = require("./translate/translate-quick-info");
var translate_rename_info_1 = require("./translate/translate-rename-info");
var translate_rename_locations_1 = require("./translate/translate-rename-locations");
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
});
TsLitPlugin.prototype.getCompletionEntryDetails = function (fileName, position, name, formatOptions, source, preferences) {
var file = this.program.getSourceFile(fileName);
var result = this.litAnalyzer.getCompletionDetailsAtPosition(file, position, name);
return ((result && translate_completion_details_1.translateCompletionDetails(result, this.context)) ||
this.prevLangService.getCompletionEntryDetails(fileName, position, name, formatOptions, source, preferences));
};
TsLitPlugin.prototype.getCompletionsAtPosition = function (fileName, position, options) {
var file = this.program.getSourceFile(fileName);
var result = this.litAnalyzer.getCompletionsAtPosition(file, position);
return (result && translate_completions_1.translateCompletions(result)) || this.prevLangService.getCompletionsAtPosition(fileName, position, options);
};
TsLitPlugin.prototype.getSemanticDiagnostics = function (fileName) {
var file = this.program.getSourceFile(fileName);
var result = this.litAnalyzer.getDiagnosticsInFile(file);
var prevResult = this.prevLangService.getSemanticDiagnostics(fileName) || [];
return __spread(prevResult, translate_diagnostics_1.translateDiagnostics(result, file, this.context));
};
TsLitPlugin.prototype.getDefinitionAndBoundSpan = function (fileName, position) {
var file = this.program.getSourceFile(fileName);
var definition = this.litAnalyzer.getDefinitionAtPosition(file, position);
return (definition && translate_definition_1.translateDefinition(definition)) || this.prevLangService.getDefinitionAndBoundSpan(fileName, position);
};
TsLitPlugin.prototype.getCodeFixesAtPosition = function (fileName, start, end, errorCodes, formatOptions, preferences) {
var file = this.program.getSourceFile(fileName);
var prevResult = this.prevLangService.getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences) || [];
var codeFixes = translate_code_fixes_1.translateCodeFixes(this.litAnalyzer.getCodeFixesAtPositionRange(file, { start: start, end: end }), file);
return __spread(prevResult, codeFixes);
};
TsLitPlugin.prototype.getQuickInfoAtPosition = function (fileName, position) {
var file = this.program.getSourceFile(fileName);
var quickInfo = this.litAnalyzer.getQuickInfoAtPosition(file, position);
return (quickInfo && translate_quick_info_1.translateQuickInfo(quickInfo)) || this.prevLangService.getQuickInfoAtPosition(fileName, position);
};
TsLitPlugin.prototype.getOutliningSpans = function (fileName) {
var file = this.program.getSourceFile(fileName);
var prev = this.prevLangService.getOutliningSpans(fileName);
var outliningSpans = translate_outlining_spans_1.translateOutliningSpans(this.litAnalyzer.getOutliningSpansInFile(file));
return __spread(prev, outliningSpans);
};
TsLitPlugin.prototype.getJsxClosingTagAtPosition = function (fileName, position) {
var file = this.program.getSourceFile(fileName);
var result = this.litAnalyzer.getClosingTagAtPosition(file, position);
return result || this.prevLangService.getJsxClosingTagAtPosition(fileName, position);
};
TsLitPlugin.prototype.getSignatureHelpItems = function (fileName, position, options) {
var result = this.prevLangService.getSignatureHelpItems(fileName, position, options);
// 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, providePrefixAndSuffixTextForRename) {
var file = this.program.getSourceFile(fileName);
var prev = this.prevLangService.findRenameLocations(fileName, position, findInStrings, findInComments, providePrefixAndSuffixTextForRename);
var renameLocations = translate_rename_locations_1.translateRenameLocations(this.litAnalyzer.getRenameLocationsAtPosition(file, position));
if (prev == null) {
return renameLocations;
}
return __spread(prev, renameLocations);
};
TsLitPlugin.prototype.getRenameInfo = function (fileName, position, options) {
var file = this.program.getSourceFile(fileName);
var result = this.litAnalyzer.getRenameInfoAtPosition(file, position);
return (result && translate_rename_info_1.translateRenameInfo(result)) || this.prevLangService.getRenameInfo(fileName, position, options);
};
TsLitPlugin.prototype.getFormattingEditsForRange = function (fileName, start, end, settings) {
var prev = this.prevLangService.getFormattingEditsForRange(fileName, start, end, settings);
// 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 = translate_format_edits_1.translateFormatEdits(this.litAnalyzer.getFormatEditsInFile(file, settings));
return __spread(prev, edits);
};
return TsLitPlugin;
}());
exports.TsLitPlugin = TsLitPlugin;