mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-30 01:07:01 +08:00
This makes VSCode a lot faster in the DevTools codebase by only autocompleting over the files depended on by this file. Change-Id: I94421969291a135a46673c02722e77f0d6709426 Reviewed-on: https://chromium-review.googlesource.com/1058680 Commit-Queue: Joel Einbinder <einbinder@chromium.org> Reviewed-by: Erik Luo <luoe@chromium.org> Reviewed-by: Dmitry Gozman <dgozman@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#558710} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: 950b66e704654fe319225b5e1d2ac58f74cea0ce
59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
// Copyright 2018 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// This file generates jsconfig.json to improve VSCode autocomplete in the DevTools codebase.
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const utils = require('./utils');
|
|
|
|
const FRONTEND_PATH = path.resolve(__dirname, '..', 'front_end');
|
|
|
|
const modulePaths = [];
|
|
for (let dir of fs.readdirSync(FRONTEND_PATH)) {
|
|
if (!utils.isDir(path.resolve(FRONTEND_PATH, dir)))
|
|
continue;
|
|
const modulePath = path.resolve(dir, 'module.json');
|
|
if (utils.isFile(path.resolve(FRONTEND_PATH, dir, 'module.json')))
|
|
modulePaths.push(dir);
|
|
}
|
|
const modules = new Map();
|
|
for (const modulePath of modulePaths) {
|
|
const moduleObject = JSON.parse(fs.readFileSync(path.resolve(FRONTEND_PATH, modulePath, 'module.json')));
|
|
modules.set(modulePath, moduleObject);
|
|
}
|
|
|
|
for (const [name, moduleJSON] of modules) {
|
|
const jsconfig = {
|
|
compilerOptions: {
|
|
target: 'esnext',
|
|
lib: ['esnext', 'dom']
|
|
},
|
|
include: [
|
|
'**/*',
|
|
'../Runtime.js',
|
|
'../externs.js'
|
|
],
|
|
exclude: (moduleJSON.skip_compilation || [])
|
|
};
|
|
for (const dependency of dependencyChain(name)) {
|
|
jsconfig.include.push('../' + dependency + '/**/*');
|
|
for (const file of modules.get(dependency).skip_compilation || [])
|
|
jsconfig.exclude.push(path.posix.join('..',dependency, file));
|
|
}
|
|
fs.writeFileSync(path.resolve(FRONTEND_PATH, name, 'jsconfig.json'), JSON.stringify(jsconfig, undefined, 2));
|
|
}
|
|
|
|
/**
|
|
* @param {string} moduleName
|
|
* @return {!Set<string>}
|
|
*/
|
|
function dependencyChain(moduleName) {
|
|
const dependencies = new Set();
|
|
for (const dependency of modules.get(moduleName).dependencies || []){
|
|
dependencies.add(dependency);
|
|
for (const innerDependency of dependencyChain(dependency))
|
|
dependencies.add(innerDependency);
|
|
}
|
|
return dependencies;
|
|
} |