-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
extension.js
52 lines (44 loc) · 1.82 KB
/
extension.js
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
43
44
45
46
47
48
49
50
51
52
/* eslint-disable max-lines */
const vscode = require('vscode');
const path = require('path');
const fs = require('fs');
const requirejs = require('requirejs');
const amodroConfig = require('amodro-trace/config');
const ReferenceProvider = require('./ReferenceProvider');
// Initialize or re-initialize requirejs for the activated context.
function initializeRequireJs () {
const requireModuleSupport = vscode.workspace.getConfiguration('requireModuleSupport');
const rootPath = vscode.workspace.rootPath;
// Clean up requirejs configuration from the previously activated context.
// See https://github.com/requirejs/requirejs/issues/1113 for more information.
delete requirejs.s.contexts._;
// Handle the existing modulePath property as baseUrl for require.config()
// to support simple scenarios. More complex projects should supply also
// configFile in addition to baseUrl to resolve any module path.
requirejs.config({ baseUrl: path.join(rootPath, requireModuleSupport.get('modulePath')) });
// Reuse the configuration for debugging a requirejs project for editing too.
// Prevent maintaining the same configuration in settings.json.
const configFile = requireModuleSupport.get('configFile');
if (configFile) {
const configContent = fs.readFileSync(path.join(rootPath, configFile), 'utf-8');
const config = amodroConfig.find(configContent);
if (config) {
requirejs.config(config);
}
}
}
const language = [{ scheme: 'file', language: 'javascript' }, { scheme: 'file', language: 'javascriptreact' }];
Object.assign(exports, {
ReferenceProvider,
activate (context) {
initializeRequireJs();
context.subscriptions.push(
vscode.workspace.onDidChangeConfiguration(initializeRequireJs));
context.subscriptions.push(
vscode.languages.registerDefinitionProvider(
language,
new ReferenceProvider()
)
);
}
});