@ui5/linter
Version:
A static code analysis tool for UI5
80 lines • 2.63 kB
JavaScript
import ts from "typescript";
import { CONTROLLER_BY_ID_DTS_PATH } from "../xmlTemplate/linter.js";
export default class LanguageServiceHostProxy {
emptyLanguageServiceHost;
languageServiceHost;
scriptSnapshots = {};
constructor() {
this.emptyLanguageServiceHost = this.languageServiceHost = new EmptyLanguageServiceHost();
}
setHost(languageServiceHostImpl) {
this.languageServiceHost = languageServiceHostImpl ?? this.emptyLanguageServiceHost;
}
static isSharedTypesFile(filePath) {
// ControllerById.d.ts file is generated per project and should not be treated as a shared file
return filePath.startsWith("/types/") && filePath !== CONTROLLER_BY_ID_DTS_PATH;
}
// ts.LanguageServiceHost implementation:
getCompilationSettings() {
return this.languageServiceHost.getCompilationSettings();
}
getScriptFileNames() {
return this.languageServiceHost.getScriptFileNames();
}
getScriptVersion(fileName) {
if (LanguageServiceHostProxy.isSharedTypesFile(fileName)) {
// All types should be cached forever as they can be shared across projects
return "1";
}
return this.languageServiceHost.getScriptVersion(fileName);
}
getScriptSnapshot(fileName) {
if (this.scriptSnapshots[fileName]) {
return this.scriptSnapshots[fileName];
}
const scriptSnapshot = this.languageServiceHost.getScriptSnapshot(fileName);
if (LanguageServiceHostProxy.isSharedTypesFile(fileName)) {
this.scriptSnapshots[fileName] = scriptSnapshot;
}
return scriptSnapshot;
}
fileExists(filePath) {
return this.languageServiceHost.fileExists(filePath);
}
readFile(filePath) {
return this.languageServiceHost.readFile(filePath);
}
getDefaultLibFileName(options) {
return this.languageServiceHost.getDefaultLibFileName(options);
}
getCurrentDirectory() {
return this.languageServiceHost.getCurrentDirectory();
}
}
export class EmptyLanguageServiceHost {
getCompilationSettings() {
return {};
}
getScriptFileNames() {
return [];
}
getScriptVersion() {
return "0";
}
getScriptSnapshot() {
return undefined;
}
fileExists() {
return false;
}
readFile() {
return undefined;
}
getCurrentDirectory() {
return "/";
}
getDefaultLibFileName(options) {
return ts.getDefaultLibFileName(options);
}
}
//# sourceMappingURL=LanguageServiceHostProxy.js.map