This repository has been archived by the owner on Nov 16, 2023. It is now read-only.
/
index.ts
42 lines (35 loc) · 1.54 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { TSLintPlugin } from './plugin';
import * as ts_module from 'typescript/lib/tsserverlibrary';
import { Logger } from './logger';
import { ConfigurationManager } from './settings';
import * as mockRequire from 'mock-require';
export = function init({ typescript }: { typescript: typeof ts_module }) {
const configManager = new ConfigurationManager(typescript);
let logger: Logger | undefined;
// Make sure TS Lint imports the correct version of TS
mockRequire('typescript', typescript);
return {
create(info: ts.server.PluginCreateInfo) {
logger = Logger.forPlugin(info);
logger.info('Create');
configManager.setProject(info.project, logger);
configManager.updateFromPluginConfig(info.config);
if (!isValidTypeScriptVersion(typescript)) {
logger.info('Invalid typescript version detected. The TSLint plugin requires a version of TS with a services version between 0.8 and 1.0');
return info.languageService;
}
return new TSLintPlugin(typescript, logger, info.project, configManager)
.decorate(info.languageService);
},
onConfigurationChanged(config: any) {
if (logger) {
logger.info('onConfigurationChanged');
}
configManager.updateFromPluginConfig(config);
},
};
};
function isValidTypeScriptVersion(typescript: typeof ts_module): boolean {
const [major] = typescript.version.split('.');
return +major >= 3;
}