86 lines
3.5 KiB
JavaScript
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;
|