libreccm-legacy/trunk-images/node_modules/tslint/lib/language/languageServiceHost.js

86 lines
3.5 KiB
JavaScript

/**
* @license
* Copyright 2014 Palantir Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var utils_1 = require("./utils");
function wrapProgram(program) {
var files = new Map(); // file name -> content
var fileVersions = new Map();
var host = {
getCompilationSettings: function () { return program.getCompilerOptions(); },
getCurrentDirectory: function () { return program.getCurrentDirectory(); },
getDefaultLibFileName: function () { return "lib.d.ts"; },
getScriptFileNames: function () { return program.getSourceFiles().map(function (sf) { return sf.fileName; }); },
getScriptSnapshot: function (name) {
var file = files.get(name);
if (file !== undefined) {
return ts.ScriptSnapshot.fromString(file);
}
if (!program.getSourceFile(name)) {
return undefined;
}
return ts.ScriptSnapshot.fromString(program.getSourceFile(name).getFullText());
},
getScriptVersion: function (name) {
var version = fileVersions.get(name);
return version === undefined ? "1" : String(version);
},
log: function () { },
editFile: function (fileName, newContent) {
files.set(fileName, newContent);
var prevVersion = fileVersions.get(fileName);
fileVersions.set(fileName, prevVersion === undefined ? 0 : prevVersion + 1);
},
};
var langSvc = ts.createLanguageService(host, ts.createDocumentRegistry());
langSvc.editFile = host.editFile;
return langSvc;
}
exports.wrapProgram = wrapProgram;
function checkEdit(ls, sf, newText) {
if (ls.hasOwnProperty("editFile")) {
var host = ls;
host.editFile(sf.fileName, newText);
var newProgram = ls.getProgram();
var newSf = newProgram.getSourceFile(sf.fileName);
var newDiags = ts.getPreEmitDiagnostics(newProgram, newSf);
// revert
host.editFile(sf.fileName, sf.getFullText());
return newDiags;
}
return [];
}
exports.checkEdit = checkEdit;
function createLanguageServiceHost(fileName, source) {
return {
getCompilationSettings: function () { return utils_1.createCompilerOptions(); },
getCurrentDirectory: function () { return ""; },
getDefaultLibFileName: function () { return "lib.d.ts"; },
getScriptFileNames: function () { return [fileName]; },
getScriptSnapshot: function (name) { return ts.ScriptSnapshot.fromString(name === fileName ? source : ""); },
getScriptVersion: function () { return "1"; },
log: function () { },
};
}
exports.createLanguageServiceHost = createLanguageServiceHost;
function createLanguageService(fileName, source) {
var languageServiceHost = createLanguageServiceHost(fileName, source);
return ts.createLanguageService(languageServiceHost);
}
exports.createLanguageService = createLanguageService;