UNPKG

typescript-eslint-language-service

Version:
76 lines 3.21 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.pluginModuleFactory = void 0; const path_1 = __importDefault(require("path")); const language_service_proxy_builder_1 = require("./language-service-proxy-builder"); const eslint_adapter_1 = require("./eslint-adapter"); const eslint_config_provider_1 = require("./eslint-config-provider"); const consts_1 = require("./consts"); function create(info) { if (!!process.env["TS_ESLINT_SERVICE_DISABLED"]) return info.languageService; const { languageService, serverHost, project, config: pluginConfigObj } = info; const projectDir = path_1.default.dirname(project.getProjectName()); const logger = (msg) => project.projectService.logger.info(`[typescript-eslint-language-service] ${msg}`); logger("config: " + JSON.stringify(pluginConfigObj)); let watchDirs; if (Array.isArray(pluginConfigObj.watchDirs)) { watchDirs = pluginConfigObj.watchDirs .filter(x => typeof x === "string") .map(x => path_1.default.resolve(projectDir, x)); } else { watchDirs = [projectDir]; } const getProgram = () => { const program = languageService.getProgram(); if (!program) { throw new Error(); } return program; }; const configProvider = new eslint_config_provider_1.ESLintConfigProvider({ directoriesToWatch: watchDirs, log: logger, host: serverHost, }); const adapter = new eslint_adapter_1.ESLintAdapter({ logger, configProvider, getSourceFile(fileName) { return getProgram().getSourceFile(fileName); }, }); const originalReadFileFn = serverHost.readFile; serverHost.readFile = (path, encoding) => { adapter.checkFileToBeIgnored(path); return originalReadFileFn(path, encoding); }; const proxy = new language_service_proxy_builder_1.LanguageServiceProxyBuilder(info) .wrap("getSemanticDiagnostics", delegate => adapter.getSemanticDiagnostics.bind(adapter, delegate)) .wrap("getCodeFixesAtPosition", delegate => adapter.getCodeFixesAtPosition.bind(adapter, delegate)) .wrap("getSupportedCodeFixes", delegate => (filename) => [ ...delegate(filename), `${consts_1.TS_LANGSERVICE_ESLINT_DIAGNOSTIC_ERROR_CODE}`, ]) .build(); return proxy; } const pluginModuleFactory = ({ typescript }) => { try { // NOTE // Now ts.LanguageService does not exported method to get supported fixable codes. // So I monkey-patche to override ts.getSupportedCodeFixes til https://github.com/microsoft/TypeScript/pull/29010 is merged. const delegate = typescript.getSupportedCodeFixes; typescript.getSupportedCodeFixes = () => [...delegate(), `${consts_1.TS_LANGSERVICE_ESLINT_DIAGNOSTIC_ERROR_CODE}`]; } catch { // Nothing to do } return { create }; }; exports.pluginModuleFactory = pluginModuleFactory; //# sourceMappingURL=plugin-module-factory.js.map