mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-30 01:07:01 +08:00
We weren't running ESLint on this directory and, as it turns out, there are quite a few linter errors in this folder. R=jacktfranklin@chromium.org Change-Id: Ic6cb9f6ad4858f69114e0c433a954041215b49e2 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2096705 Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org> Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
126 lines
4.4 KiB
JavaScript
126 lines
4.4 KiB
JavaScript
// Copyright 2019 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 script is called by generate_devtools_ui_strings.py as part of the build process. It
|
|
* parses DevTools frontend .js and module.json files, collects localizable strings, checks
|
|
* if frontend strings are in .grd/.grdp files and reports error if present, and generates
|
|
* {jsonKey, IDS_KEY} mappings if there is no error.
|
|
*
|
|
* Usage:
|
|
* --root_gen_dir The root directory of the output .h and .cc files
|
|
* --output_header Absolute path of the output .h file for the id mappings
|
|
* --output_cc Absolute path of the output .cc file for the id mappings
|
|
*/
|
|
|
|
const checkLocalizedStrings = require('../localization/utils/check_localized_strings');
|
|
const localizationUtils = require('../localization/utils/localization_utils');
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const {promisify} = require('util');
|
|
const writeFileAsync = promisify(fs.writeFile);
|
|
|
|
class Arguments {
|
|
constructor(rootGenDir, outputHeaderFilePath, outputCCFilePath) {
|
|
this.rootGenDir = rootGenDir;
|
|
this.outputHeaderFilePath = outputHeaderFilePath;
|
|
this.outputCCFilePath = outputCCFilePath;
|
|
}
|
|
}
|
|
|
|
function parseArguments(args) {
|
|
const rootGenDirIndex = args.indexOf('--root_gen_dir');
|
|
const outputHeaderIndex = args.indexOf('--output_header');
|
|
const outputCCIndex = args.indexOf('--output_cc');
|
|
return new Arguments(args[rootGenDirIndex + 1], args[outputHeaderIndex + 1], args[outputCCIndex + 1]);
|
|
}
|
|
|
|
async function main() {
|
|
const args = parseArguments(process.argv);
|
|
let frontendStrings;
|
|
try {
|
|
[frontendStrings, _] = await checkLocalizedStrings.parseLocalizableResourceMaps();
|
|
} catch (e) {
|
|
console.log(e);
|
|
process.exit(1);
|
|
}
|
|
|
|
const toAddError = checkLocalizedStrings.getAndReportResourcesToAdd();
|
|
const toModifyError = checkLocalizedStrings.getAndReportIDSKeysToModify();
|
|
const toRemoveError = checkLocalizedStrings.getAndReportResourcesToRemove();
|
|
let error = `${toAddError ? `${toAddError}\n` : ''}${toModifyError ? `${toModifyError}\n` : ''}${
|
|
toRemoveError ? `${toRemoveError}\n` : ''}`;
|
|
if (error !== '') {
|
|
error +=
|
|
'\nThe errors are potentially fixable with `node third_party/devtools-frontend/src/scripts/check_localizable_resources.js --autofix`';
|
|
console.log(error);
|
|
}
|
|
|
|
// Since it's part of the build system, only fail if there are strings to be added to GRD/GRDP files
|
|
// or if there are wrong IDS_ keys.
|
|
if (toAddError || toModifyError) {
|
|
process.exit(1);
|
|
}
|
|
|
|
try {
|
|
await generateDevToolsLocalizedStrings(args, frontendStrings);
|
|
} catch (e) {
|
|
console.log('Error generating id map files:');
|
|
console.log(e.stack);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Generates {jsonKey, IDS_KEY} mappings according to frontendStrings
|
|
async function generateDevToolsLocalizedStrings(args, frontendStrings) {
|
|
const promises = [];
|
|
const outputAbsoluteHeaderFilePath = path.join(args.rootGenDir, args.outputHeaderFilePath);
|
|
const outputAbsoluteCCFilePath = path.join(args.rootGenDir, args.outputCCFilePath);
|
|
const doNotEditStr =
|
|
'// This file is automatically generated by //third_party/devtools-frontend/src/scripts/build/generate_devtools_ui_strings.js. Do not edit.';
|
|
const outputHeaderFileContent = `${doNotEditStr}
|
|
|
|
#ifndef CHROME_BROWSER_UI_WEBUI_DEVTOOLS_UI_STRINGS_H_
|
|
#define CHROME_BROWSER_UI_WEBUI_DEVTOOLS_UI_STRINGS_H_
|
|
|
|
#include "chrome/browser/ui/webui/localized_string.h"
|
|
|
|
namespace devtools {
|
|
|
|
constexpr unsigned int kLocalizedStringsSize = ${frontendStrings.size};
|
|
extern const LocalizedString kLocalizedStrings[kLocalizedStringsSize];
|
|
|
|
} // namespace devtools
|
|
|
|
#endif // CHROME_BROWSER_UI_WEBUI_DEVTOOLS_UI_STRINGS_H_
|
|
`;
|
|
|
|
promises.push(writeFileAsync(outputAbsoluteHeaderFilePath, outputHeaderFileContent));
|
|
|
|
let mappingsStr = '';
|
|
frontendStrings.forEach((frontendString, idsKey) => {
|
|
mappingsStr += ` {"${localizationUtils.sanitizeStringIntoCppFormat(frontendString.string)}", ${idsKey}},\n`;
|
|
});
|
|
|
|
const outputCCFileContent = `${doNotEditStr}
|
|
|
|
#include "${args.outputHeaderFilePath}"
|
|
|
|
#include "third_party/devtools-frontend/src/front_end/langpacks/devtools_ui_strings.h"
|
|
|
|
namespace devtools {
|
|
|
|
const LocalizedString kLocalizedStrings[] = {
|
|
${mappingsStr}};
|
|
|
|
} // namespace devtools
|
|
`;
|
|
|
|
promises.push(writeFileAsync(outputAbsoluteCCFilePath, outputCCFileContent));
|
|
return Promise.all(promises);
|
|
}
|
|
|
|
main();
|